/*
 * Copyright (c) 2018 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
const AbstractModel = require("../../common/abstract_model");

/**
 * DisableAutoScalingGroup response structure.
 * @class
 */
class DisableAutoScalingGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyLaunchConfigurationAttributes request structure.
 * @class
 */
class ModifyLaunchConfigurationAttributesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Launch configuration ID. obtain the launch configuration ID by logging in to the console (https://console.cloud.tencent.com/autoscaling/config) or calling the api DescribeLaunchConfigurations (https://intl.cloud.tencent.com/document/api/377/20445?from_cn_redirect=1) and retrieving the LaunchConfigurationId from the return information.
         * @type {string || null}
         */
        this.LaunchConfigurationId = null;

        /**
         * [Image](https://intl.cloud.tencent.com/document/product/213/4940?from_cn_redirect=1) ID in the format of `img-xxx`. There are three types of images: <br/><li>Public images </li><li>Custom images </li><li>Shared images </li><br/>You can obtain the image IDs in the [CVM console](https://console.cloud.tencent.com/cvm/image?rid=1&imageType=PUBLIC_IMAGE).</li><li>You can also use the [DescribeImages](https://intl.cloud.tencent.com/document/api/213/15715?from_cn_redirect=1) and look for `ImageId` in the response.</li>
         * @type {string || null}
         */
        this.ImageId = null;

        /**
         * Types of cvm instances. different instance models specify different resource specifications. supports up to 10 instance models.
The launch configuration uses `InstanceType` to indicate one single instance type and `InstanceTypes` to indicate multiple instance types. specifying the `InstanceTypes` field will invalidate the original `InstanceType`. specific values can be obtained by calling the api [DescribeInstanceTypeConfigs](https://intl.cloud.tencent.com/document/api/213/15749?from_cn_redirect=1) to obtain the latest specification table or refer to [instance specifications](https://intl.cloud.tencent.com/document/product/213/11518?from_cn_redirect=1).
         * @type {Array.<string> || null}
         */
        this.InstanceTypes = null;

        /**
         * InstanceType verification policy, which is effective when actual modification is made to InstanceTypes. Valid values include ALL and ANY and the default value is ANY.
<li>ALL: Verification passes if all InstanceTypes are available; otherwise, a verification error will be reported.</li>
<li>ANY: Verification passes if any InstanceType is available; otherwise, a verification error will be reported.</li>
Common reasons for unavailable InstanceTypes include the InstanceType being sold out, and the corresponding cloud disk being sold out.
If a model in InstanceTypes does not exist or has been abolished, a verification error will be reported regardless of the valid values set for InstanceTypesCheckPolicy.
         * @type {string || null}
         */
        this.InstanceTypesCheckPolicy = null;

        /**
         * Display name of the launch configuration, which can contain Chinese characters, letters, numbers, underscores, separators ("-"), and decimal points with a maximum length of 60 bytes.
         * @type {string || null}
         */
        this.LaunchConfigurationName = null;

        /**
         * Base64-encoded custom data of up to 16 KB. If you want to clear `UserData`, set it to an empty string.
         * @type {string || null}
         */
        this.UserData = null;

        /**
         * Security group to which the instance belongs. This parameter can be obtained from the `SecurityGroupId` field in the response of the [`DescribeSecurityGroups`](https://intl.cloud.tencent.com/document/api/215/15808?from_cn_redirect=1) API.
At least one security group is required for this parameter. The security group specified is sequential.
         * @type {Array.<string> || null}
         */
        this.SecurityGroupIds = null;

        /**
         * Information of the public network bandwidth configuration.
When the public outbound network bandwidth is 0 Mbps, assigning a public IP is not allowed. Accordingly, if a public IP is assigned, the new public network outbound bandwidth must be greater than 0 Mbps.
         * @type {InternetAccessible || null}
         */
        this.InternetAccessible = null;

        /**
         * Instance billing mode. Valid values:
<li>POSTPAID_BY_HOUR: pay-as-you-go hourly</li>
<li>SPOTPAID: spot instance</li>
<li> CDCPAID: dedicated cluster</li>
         * @type {string || null}
         */
        this.InstanceChargeType = null;

        /**
         * Parameter setting for the prepaid mode (monthly subscription mode). This parameter can specify the renewal period, whether to set the auto-renewal, and other attributes of the monthly-subscribed instances.
This parameter is required when changing the instance billing mode to monthly subscription. It will be automatically discarded after you choose another billing mode.
This field requires passing in the `Period` field. Other fields that are not passed in will use their default values.
This field can be modified only when the current billing mode is monthly subscription.
         * @type {InstanceChargePrepaid || null}
         */
        this.InstanceChargePrepaid = null;

        /**
         * Market-related options for instances, such as parameters related to spot instances.
This parameter is required when changing the instance billing mode to spot instance. It will be automatically discarded after you choose another instance billing mode.
This field requires passing in the `MaxPrice` field under the `SpotOptions`. Other fields that are not passed in will use their default values.
This field can be modified only when the current billing mode is spot instance.
         * @type {InstanceMarketOptionsRequest || null}
         */
        this.InstanceMarketOptions = null;

        /**
         * Cloud disk type selection policy. Valid values:
<li>ORIGINAL: Use the set cloud disk type.</li>
<li>AUTOMATIC: Automatically select the currently available cloud disk type.</li>
         * @type {string || null}
         */
        this.DiskTypePolicy = null;

        /**
         * Instance system disk configurations
         * @type {SystemDisk || null}
         */
        this.SystemDisk = null;

        /**
         * Configuration information of instance data disks.
Up to 11 data disks can be specified and will be collectively modified. Please provide all the new values for the modification.
The default data disk should be the same as the system disk.
         * @type {Array.<DataDisk> || null}
         */
        this.DataDisks = null;

        /**
         * CVM hostname settings.
This field is not supported for Windows instances.
This field requires passing the `HostName` field. Other fields that are not passed in will use their default values.
         * @type {HostNameSettings || null}
         */
        this.HostNameSettings = null;

        /**
         * Settings of CVM instance names. 
If this field is configured in a launch configuration, the `InstanceName` of a CVM created by the scaling group will be generated according to the configuration; otherwise, it will be in the `as-{{AutoScalingGroupName }}` format.
This field requires passing in the `InstanceName` field. Other fields that are not passed in will use their default values.
         * @type {InstanceNameSettings || null}
         */
        this.InstanceNameSettings = null;

        /**
         * Specifies whether to enable additional services, such as security services and monitoring service.
         * @type {EnhancedService || null}
         */
        this.EnhancedService = null;

        /**
         * Role name of the CAM role. can be obtained from roleName in the return value from the DescribeRoleList API (https://intl.cloud.tencent.com/document/product/598/36223?from_cn_redirect=1).
         * @type {string || null}
         */
        this.CamRoleName = null;

        /**
         * High-Performance computing cluster ID. you can obtain this parameter by calling the [DescribeHpcClusters](https://intl.cloud.tencent.com/document/product/213/83220?from_cn_redirect=1) api.
Note: this field is empty by default.
         * @type {string || null}
         */
        this.HpcClusterId = null;

        /**
         * IPv6 public network bandwidth configuration. If the IPv6 address is available in the new instance, public network bandwidth can be allocated to the IPv6 address. This parameter is invalid if `Ipv6AddressCount` of the scaling group associated with the launch configuration is 0.
         * @type {IPv6InternetAccessible || null}
         */
        this.IPv6InternetAccessible = null;

        /**
         * Placement group id. only one can be specified. obtain through the API [DescribeDisasterRecoverGroups](https://intl.cloud.tencent.com/document/product/213/17810?from_cn_redirect=1).
         * @type {Array.<string> || null}
         */
        this.DisasterRecoverGroupIds = null;

        /**
         * Instance login settings, which include passwords, keys, or the original login settings inherited from the image. <br>Please note that specifying new login settings will overwrite the existing ones. For instance, if you previously used a password for login and then use this parameter to switch the login settings to a key, the original password will be removed.
         * @type {LoginSettings || null}
         */
        this.LoginSettings = null;

        /**
         * Instance tag list. By specifying this parameter, the instances added through scale-out can be bound to the tag. Up to 10 Tags can be specified.
This parameter will overwrite the original instance tag list. To add new tags, you need to pass the new tags along with the original tags.
         * @type {Array.<InstanceTag> || null}
         */
        this.InstanceTags = null;

        /**
         * Image family name. this parameter can be obtained by calling the [DescribeImages](https://intl.cloud.tencent.com/document/product/213/15715?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.ImageFamily = null;

        /**
         * Cloud Dedicated Cluster (CDC) ID.
         * @type {string || null}
         */
        this.DedicatedClusterId = null;

        /**
         * Custom metadata.
         * @type {Metadata || null}
         */
        this.Metadata = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LaunchConfigurationId = 'LaunchConfigurationId' in params ? params.LaunchConfigurationId : null;
        this.ImageId = 'ImageId' in params ? params.ImageId : null;
        this.InstanceTypes = 'InstanceTypes' in params ? params.InstanceTypes : null;
        this.InstanceTypesCheckPolicy = 'InstanceTypesCheckPolicy' in params ? params.InstanceTypesCheckPolicy : null;
        this.LaunchConfigurationName = 'LaunchConfigurationName' in params ? params.LaunchConfigurationName : null;
        this.UserData = 'UserData' in params ? params.UserData : null;
        this.SecurityGroupIds = 'SecurityGroupIds' in params ? params.SecurityGroupIds : null;

        if (params.InternetAccessible) {
            let obj = new InternetAccessible();
            obj.deserialize(params.InternetAccessible)
            this.InternetAccessible = obj;
        }
        this.InstanceChargeType = 'InstanceChargeType' in params ? params.InstanceChargeType : null;

        if (params.InstanceChargePrepaid) {
            let obj = new InstanceChargePrepaid();
            obj.deserialize(params.InstanceChargePrepaid)
            this.InstanceChargePrepaid = obj;
        }

        if (params.InstanceMarketOptions) {
            let obj = new InstanceMarketOptionsRequest();
            obj.deserialize(params.InstanceMarketOptions)
            this.InstanceMarketOptions = obj;
        }
        this.DiskTypePolicy = 'DiskTypePolicy' in params ? params.DiskTypePolicy : null;

        if (params.SystemDisk) {
            let obj = new SystemDisk();
            obj.deserialize(params.SystemDisk)
            this.SystemDisk = obj;
        }

        if (params.DataDisks) {
            this.DataDisks = new Array();
            for (let z in params.DataDisks) {
                let obj = new DataDisk();
                obj.deserialize(params.DataDisks[z]);
                this.DataDisks.push(obj);
            }
        }

        if (params.HostNameSettings) {
            let obj = new HostNameSettings();
            obj.deserialize(params.HostNameSettings)
            this.HostNameSettings = obj;
        }

        if (params.InstanceNameSettings) {
            let obj = new InstanceNameSettings();
            obj.deserialize(params.InstanceNameSettings)
            this.InstanceNameSettings = obj;
        }

        if (params.EnhancedService) {
            let obj = new EnhancedService();
            obj.deserialize(params.EnhancedService)
            this.EnhancedService = obj;
        }
        this.CamRoleName = 'CamRoleName' in params ? params.CamRoleName : null;
        this.HpcClusterId = 'HpcClusterId' in params ? params.HpcClusterId : null;

        if (params.IPv6InternetAccessible) {
            let obj = new IPv6InternetAccessible();
            obj.deserialize(params.IPv6InternetAccessible)
            this.IPv6InternetAccessible = obj;
        }
        this.DisasterRecoverGroupIds = 'DisasterRecoverGroupIds' in params ? params.DisasterRecoverGroupIds : null;

        if (params.LoginSettings) {
            let obj = new LoginSettings();
            obj.deserialize(params.LoginSettings)
            this.LoginSettings = obj;
        }

        if (params.InstanceTags) {
            this.InstanceTags = new Array();
            for (let z in params.InstanceTags) {
                let obj = new InstanceTag();
                obj.deserialize(params.InstanceTags[z]);
                this.InstanceTags.push(obj);
            }
        }
        this.ImageFamily = 'ImageFamily' in params ? params.ImageFamily : null;
        this.DedicatedClusterId = 'DedicatedClusterId' in params ? params.DedicatedClusterId : null;

        if (params.Metadata) {
            let obj = new Metadata();
            obj.deserialize(params.Metadata)
            this.Metadata = obj;
        }

    }
}

/**
 * DisableAutoScalingGroup request structure.
 * @class
 */
class DisableAutoScalingGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. obtain the scaling group ID by logging in to the console (https://console.cloud.tencent.com/autoscaling/group) or calling the api DescribeAutoScalingGroups (https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1), and retrieve AutoScalingGroupId from the returned information.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;

    }
}

/**
 * DescribeRefreshActivities response structure.
 * @class
 */
class DescribeRefreshActivitiesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of refresh activities that meet the conditions.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * A collection of information about refresh activities that meet the conditions.
         * @type {Array.<RefreshActivity> || null}
         */
        this.RefreshActivitySet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.RefreshActivitySet) {
            this.RefreshActivitySet = new Array();
            for (let z in params.RefreshActivitySet) {
                let obj = new RefreshActivity();
                obj.deserialize(params.RefreshActivitySet[z]);
                this.RefreshActivitySet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyAutoScalingGroup request structure.
 * @class
 */
class ModifyAutoScalingGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. obtain available scaling group ids in the following ways:.
<li>Query the scaling group ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group).</li>.
<li>Specifies the scaling group ID obtained by calling the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the return information.</li>.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Auto scaling group name, which can only contain letters, numbers, underscores, hyphens ("-"), and decimal points with a maximum length of 55 bytes and must be unique under your account.
         * @type {string || null}
         */
        this.AutoScalingGroupName = null;

        /**
         * Default cooldown period in seconds. value ranges from 0 to 3600. default value: 300.
         * @type {number || null}
         */
        this.DefaultCooldown = null;

        /**
         * Expected number of instances, value ranges from 0 to 2000. to meet maximum value greater than or equal to expected value, expected value greater than or equal to minimum value.
         * @type {number || null}
         */
        this.DesiredCapacity = null;

        /**
         * Launch configuration ID. obtain available launch configuration ids in the following ways:.
<li>Queries the launch configuration ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/config).</li>.
<li>Specifies the launch configuration ID obtained by calling the api [DescribeLaunchConfigurations](https://intl.cloud.tencent.com/document/api/377/20445?from_cn_redirect=1) and retrieving the LaunchConfigurationId from the return information.</li>.
         * @type {string || null}
         */
        this.LaunchConfigurationId = null;

        /**
         * Maximum number of instances, value range from 0 to 2000. to meet maximum value greater than or equal to expected value, expected value greater than or equal to minimum value.
         * @type {number || null}
         */
        this.MaxSize = null;

        /**
         * Minimum number of instances. value range [0,2000]. to meet maximum value equal to or greater than expected value, expected value equal to or greater than minimum value.
         * @type {number || null}
         */
        this.MinSize = null;

        /**
         * Project ID. obtain this parameter by calling [DescribeProject](https://intl.cloud.tencent.com/document/api/651/78725?from_cn_redirect=1), `ProjectId` field in the return value. default value is 0, indicates usage of the default project.
         * @type {number || null}
         */
        this.ProjectId = null;

        /**
         * subnet ID list. you can obtain a valid vpc subnet ID by logging in to the [console](https://console.cloud.tencent.com/vpc/subnet). you can also call the API [DescribeSubnets](https://intl.cloud.tencent.com/document/product/215/15784?from_cn_redirect=1) and retrieve the valid vpc subnet ID from the SubnetId field in the API response.
         * @type {Array.<string> || null}
         */
        this.SubnetIds = null;

        /**
         * Termination policy, whose maximum length is currently 1. Valid values include OLDEST_INSTANCE and NEWEST_INSTANCE.
<li>OLDEST_INSTANCE: Terminate the oldest instance in the scaling group first.</li>
<li>NEWEST_INSTANCE: Terminate the newest instance in the scaling group first.</li>
         * @type {Array.<string> || null}
         */
        this.TerminationPolicies = null;

        /**
         * vpc ID. when modifying the vpc, you need to change the SubnetIds parameter to the subnet of this vpc. effective VpcId can be queried by logging in to the console (https://console.cloud.tencent.com/vpc/vpc) or obtained from the VpcId field in the api response by calling the DescribeVpc api (https://intl.cloud.tencent.com/document/api/215/15778?from_cn_redirect=1).
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * List of availability zones
         * @type {Array.<string> || null}
         */
        this.Zones = null;

        /**
         * Retry policy, whose valid values include IMMEDIATE_RETRY, INCREMENTAL_INTERVALS, and NO_RETRY, with the default value being IMMEDIATE_RETRY. A partially successful scaling activity is considered a failed activity.
<li>IMMEDIATE_RETRY: Immediately retry, and quickly retry in a short period. There will be no retry anymore after a certain number of consecutive failures (5).</li>
<li>INCREMENTAL_INTERVALS: Retry with incremental intervals. As the number of consecutive failures increases, the retry intervals gradually become longer, ranging from seconds to one day.</li>
<li>NO_RETRY: There will be no retry until another user call or alarm information is received.</li>
         * @type {string || null}
         */
        this.RetryPolicy = null;

        /**
         * AZ verification policy, whose valid values include ALL and ANY, with the default value being ANY. This policy comes into effect when actual changes are made to resource-related fields in the scaling group (such as launch configuration, AZ, or subnet).
<li>ALL: Verification passes if all AZs or subnets are available; otherwise, a verification error will be reported.<li>
<li>ANY: Verification passes if any AZ or subnet is available; otherwise, a verification error will be reported.</li>

Common reasons for unavailable AZs or subnets include the CVM InstanceType in the AZ being sold out, the CBS cloud disk in the AZ being sold out, insufficient quota in the AZ, and insufficient IP addresses in the subnet.
If there is no AZ or subnet in Zones/SubnetIds, a verification error will be reported regardless of the values of ZonesCheckPolicy.
         * @type {string || null}
         */
        this.ZonesCheckPolicy = null;

        /**
         * Service settings such as unhealthy instance replacement.
         * @type {ServiceSettings || null}
         */
        this.ServiceSettings = null;

        /**
         * The number of IPv6 addresses that an instance has. valid values: 0 and 1. default value: 0, which means the instance does not allocate an IPv6 address. use a private network that supports IPv6 and enable IPv6 CIDR in the subnet. for usage restrictions, see [IPv6 usage limits](https://intl.cloud.tencent.com/document/product/1142/38369?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Ipv6AddressCount = null;

        /**
         * Multi-AZ/multi-subnet policy, whose valid values include PRIORITY and EQUALITY, with the default value being PRIORITY.
<li>PRIORITY: Instances are attempted to be created taking the order of the AZ/subnet list as the priority. If the highest-priority AZ/subnet can create instances successfully, instances can always be created in that AZ/subnet.</li>
<li>EQUALITY: The instances added through scale-out will be distributed across multiple AZs/subnets to ensure a relatively balanced number of instances in each AZ/subnet after scaling out.</li>

Points to consider regarding this policy:
<li>When the scaling group is based on a classic network, this policy applies to the multi-AZ; when the scaling group is based on a VPC network, this policy applies to the multi-subnet, in this case, the AZs are no longer considered. For example, if there are four subnets labeled A, B, C, and D, where A, B, and C are in AZ 1 and D is in AZ 2, the subnets A, B, C, and D are considered for sorting without regard to AZs 1 and 2.</li>
<li>This policy applies to the multi-AZ/multi-subnet and not to the InstanceTypes parameter of the launch configuration, which is selected according to the priority policy.</li>
<li>When instances are created according to the PRIORITY policy, ensure the policy for multiple models first, followed by the policy for the multi-AZ/subnet. For example, with models A and B and subnets 1, 2, and 3, attempts will be made in the order of A1, A2, A3, B1, B2, and B3. If A1 is sold out, A2 will be attempted (instead of B1).</li>
         * @type {string || null}
         */
        this.MultiZoneSubnetPolicy = null;

        /**
         * Scaling group instance health check type, whose valid values include:
<li>CVM: Determines whether an instance is unhealthy based on its network status. An unhealthy network status is indicated by an event where instances become unreachable via PING. Detailed criteria of judgment can be found in [Instance Health Check](https://intl.cloud.tencent.com/document/product/377/8553?from_cn_redirect=1).</li>
<li>CLB: Determines whether an instance is unhealthy based on the health check status of CLB. For principles behind CLB health checks, see [Health Check](https://intl.cloud.tencent.com/document/product/214/6097?from_cn_redirect=1).</li>
         * @type {string || null}
         */
        this.HealthCheckType = null;

        /**
         * Grace period of the CLB health check
         * @type {number || null}
         */
        this.LoadBalancerHealthCheckGracePeriod = null;

        /**
         * Instance assignment policy, whose valid values include LAUNCH_CONFIGURATION and SPOT_MIXED.
<li>LAUNCH_CONFIGURATION: Represent the traditional mode of assigning instances according to the launch configuration.</li>
<li>SPOT_MIXED: Represent the spot mixed mode. Currently, this mode is supported only when the launch configuration is set to the pay-as-you-go billing mode. In the mixed mode, the scaling group will scale out pay-as-you-go models or spot models based on the predefined settings. When the mixed mode is used, the billing type of the associated launch configuration cannot be modified.</li>
         * @type {string || null}
         */
        this.InstanceAllocationPolicy = null;

        /**
         * Specifies how to assign pay-as-you-go instances and spot instances.
This parameter is valid only when `InstanceAllocationPolicy` is set to `SPOT_MIXED`.
         * @type {SpotMixedAllocationPolicy || null}
         */
        this.SpotMixedAllocationPolicy = null;

        /**
         * Capacity rebalancing feature, which is applicable only to spot instances within the scaling group. Valid values:
<li>TRUE: Enable this feature. When spot instances in the scaling group are about to be automatically recycled by the spot instance service, AS proactively initiates the termination process of the spot instances. If there is a configured scale-in hook, it will be triggered before termination. After the termination process starts, AS asynchronously initiates the scale-out to reach the expected number of instances.</li>
<li>FALSE: Disable this feature. AS waits for the spot instance to be terminated before scaling out to reach the number of instances expected by the scaling group.</li>
         * @type {boolean || null}
         */
        this.CapacityRebalance = null;

        /**
         * Instance name sequencing settings. When enabled, an incremental numeric sequence will be appended to the names of instances automatically created within the scaling group.
         * @type {InstanceNameIndexSettings || null}
         */
        this.InstanceNameIndexSettings = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.AutoScalingGroupName = 'AutoScalingGroupName' in params ? params.AutoScalingGroupName : null;
        this.DefaultCooldown = 'DefaultCooldown' in params ? params.DefaultCooldown : null;
        this.DesiredCapacity = 'DesiredCapacity' in params ? params.DesiredCapacity : null;
        this.LaunchConfigurationId = 'LaunchConfigurationId' in params ? params.LaunchConfigurationId : null;
        this.MaxSize = 'MaxSize' in params ? params.MaxSize : null;
        this.MinSize = 'MinSize' in params ? params.MinSize : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.SubnetIds = 'SubnetIds' in params ? params.SubnetIds : null;
        this.TerminationPolicies = 'TerminationPolicies' in params ? params.TerminationPolicies : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.Zones = 'Zones' in params ? params.Zones : null;
        this.RetryPolicy = 'RetryPolicy' in params ? params.RetryPolicy : null;
        this.ZonesCheckPolicy = 'ZonesCheckPolicy' in params ? params.ZonesCheckPolicy : null;

        if (params.ServiceSettings) {
            let obj = new ServiceSettings();
            obj.deserialize(params.ServiceSettings)
            this.ServiceSettings = obj;
        }
        this.Ipv6AddressCount = 'Ipv6AddressCount' in params ? params.Ipv6AddressCount : null;
        this.MultiZoneSubnetPolicy = 'MultiZoneSubnetPolicy' in params ? params.MultiZoneSubnetPolicy : null;
        this.HealthCheckType = 'HealthCheckType' in params ? params.HealthCheckType : null;
        this.LoadBalancerHealthCheckGracePeriod = 'LoadBalancerHealthCheckGracePeriod' in params ? params.LoadBalancerHealthCheckGracePeriod : null;
        this.InstanceAllocationPolicy = 'InstanceAllocationPolicy' in params ? params.InstanceAllocationPolicy : null;

        if (params.SpotMixedAllocationPolicy) {
            let obj = new SpotMixedAllocationPolicy();
            obj.deserialize(params.SpotMixedAllocationPolicy)
            this.SpotMixedAllocationPolicy = obj;
        }
        this.CapacityRebalance = 'CapacityRebalance' in params ? params.CapacityRebalance : null;

        if (params.InstanceNameIndexSettings) {
            let obj = new InstanceNameIndexSettings();
            obj.deserialize(params.InstanceNameIndexSettings)
            this.InstanceNameIndexSettings = obj;
        }

    }
}

/**
 * ScaleOutInstances request structure.
 * @class
 */
class ScaleOutInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Number of instances to be added
         * @type {number || null}
         */
        this.ScaleOutNumber = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.ScaleOutNumber = 'ScaleOutNumber' in params ? params.ScaleOutNumber : null;

    }
}

/**
 * AS event notification
 * @class
 */
class AutoScalingNotification extends  AbstractModel {
    constructor(){
        super();

        /**
         * Auto scaling group ID.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * List of user group IDs.
         * @type {Array.<string> || null}
         */
        this.NotificationUserGroupIds = null;

        /**
         * Notification event list. valid values are as follows:.
<Li>SCALE_OUT_SUCCESSFUL: scale-out succeeded</li>.
<Li>SCALE_OUT_FAILED: scale-out failed</li>.
<Li>SCALE_IN_SUCCESSFUL: scale-in succeeded</li>.
<Li>SCALE_IN_FAILED: scale-in failed</li>.
<Li>REPLACE_UNHEALTHY_INSTANCE_SUCCESSFUL: unhealthy instance replacement succeeded</li>.
<Li>REPLACE_UNHEALTHY_INSTANCE_FAILED: unhealthy instance replacement failed</li>.
         * @type {Array.<string> || null}
         */
        this.NotificationTypes = null;

        /**
         * Event notification ID.
         * @type {string || null}
         */
        this.AutoScalingNotificationId = null;

        /**
         * Notification receiver type. valid values:.
USER_GROUP: specifies the user group.
TDMQ_CMQ_TOPIC: tdmq for cmq topic.
TDMQ_CMQ_QUEUE: specifies the tdmq cmq queue.
`CMQ_QUEUE`: cmq queue. [cmq API offline](https://intl.cloud.tencent.com/document/product/1496/83970?from_cn_redirect=1). unable to select.
CMQ_TOPIC: cmq topic. [cmq API offline](https://intl.cloud.tencent.com/document/product/1496/83970?from_cn_redirect=1), unable to select.
         * @type {string || null}
         */
        this.TargetType = null;

        /**
         * TDMQ CMQ queue name.
         * @type {string || null}
         */
        this.QueueName = null;

        /**
         * TDMQ CMQ topic name.
         * @type {string || null}
         */
        this.TopicName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.NotificationUserGroupIds = 'NotificationUserGroupIds' in params ? params.NotificationUserGroupIds : null;
        this.NotificationTypes = 'NotificationTypes' in params ? params.NotificationTypes : null;
        this.AutoScalingNotificationId = 'AutoScalingNotificationId' in params ? params.AutoScalingNotificationId : null;
        this.TargetType = 'TargetType' in params ? params.TargetType : null;
        this.QueueName = 'QueueName' in params ? params.QueueName : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;

    }
}

/**
 * ModifyScheduledAction request structure.
 * @class
 */
class ModifyScheduledActionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scheduled task ID that needs modification. obtain the scheduled task ID by calling the api [DescribeScheduledActions](https://intl.cloud.tencent.com/document/api/377/20450?from_cn_redirect=1) and retrieving the ScheduledActionId from the returned information.
         * @type {string || null}
         */
        this.ScheduledActionId = null;

        /**
         * Scheduled task name, which can only contain letters, numbers, underscores, hyphens ("-"), and decimal points with a maximum length of 60 bytes and must be unique in an auto scaling group.
         * @type {string || null}
         */
        this.ScheduledActionName = null;

        /**
         * The maximum number of instances set for the auto scaling group when the scheduled task is triggered.
         * @type {number || null}
         */
        this.MaxSize = null;

        /**
         * The minimum number of instances set for the auto scaling group when the scheduled task is triggered.
         * @type {number || null}
         */
        this.MinSize = null;

        /**
         * The desired number of instances set for the auto scaling group when the scheduled task is triggered.
         * @type {number || null}
         */
        this.DesiredCapacity = null;

        /**
         * Initial triggered time of the scheduled task. The value is in `Beijing time` (UTC+8) in the format of `YYYY-MM-DDThh:mm:ss+08:00` according to the `ISO8601` standard.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time of the scheduled task. The value is in `Beijing time` (UTC+8) in the format of `YYYY-MM-DDThh:mm:ss+08:00` according to the `ISO8601` standard. <br>This parameter and `Recurrence` need to be specified at the same time. After the end time, the scheduled task will no longer take effect.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * The repeating mode of the scheduled task. follows the standard Cron format. the Recurrence parameter limits (https://intl.cloud.tencent.com/document/product/377/88119?from_cn_redirect=1) consist of 5 fields separated by space, with the structure: minute, hr, date, month, week. this parameter must be simultaneously specified with `EndTime`.
         * @type {string || null}
         */
        this.Recurrence = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ScheduledActionId = 'ScheduledActionId' in params ? params.ScheduledActionId : null;
        this.ScheduledActionName = 'ScheduledActionName' in params ? params.ScheduledActionName : null;
        this.MaxSize = 'MaxSize' in params ? params.MaxSize : null;
        this.MinSize = 'MinSize' in params ? params.MinSize : null;
        this.DesiredCapacity = 'DesiredCapacity' in params ? params.DesiredCapacity : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Recurrence = 'Recurrence' in params ? params.Recurrence : null;

    }
}

/**
 * DescribeAutoScalingGroups request structure.
 * @class
 */
class DescribeAutoScalingGroupsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Queries by one or more auto scaling group IDs in the format of `asg-nkdwoui0`. The maximum quantity per request is 100. This parameter does not support specifying both `AutoScalingGroupIds` and `Filters` at the same time.
         * @type {Array.<string> || null}
         */
        this.AutoScalingGroupIds = null;

        /**
         * Filter criteria

<li> auto-scaling-group-id - String - required: no - (filter) filter by auto scaling group id.</li>.
Specifies the scaling group ID obtained by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group) or calling the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the return information.
<li> auto-scaling-group-name - String - required: no - (filter) filter by auto scaling group name.</li>.
<li> vague-auto-scaling-group-name - String - required: no - (filter) filter by scaling group name fuzzy search.</li>.
<li>launch-configuration-id - String - required: no - (filter condition) filter by launch configuration id. you can obtain the launch configuration id by logging in to the console (https://console.cloud.tencent.com/autoscaling/config) or calling the api DescribeLaunchConfigurations (https://intl.cloud.tencent.com/document/api/377/20445?from_cn_redirect=1) and retrieving the LaunchConfigurationId from the returned information.</li>.
<li> `tag-key` - String - optional - filter by the tag key. you can call the API [GetTags](https://intl.cloud.tencent.com/document/product/651/72275?from_cn_redirect=1) to obtain the tag key from the returned information.</li>.
<li>tag-value - String - required: no - (filter condition) filter by tag value. you can obtain the tag value by calling the API [GetTags](https://intl.cloud.tencent.com/document/product/651/72275?from_cn_redirect=1) and retrieving the TagValue from the returned information.</li>.
<li>tag:tag-key - String - required: no - (filter condition) filter by tag key-value pair. replace tag-key with a specific tag key. see example 2 for reference. call the API [GetTags](https://intl.cloud.tencent.com/document/product/651/72275?from_cn_redirect=1) to obtain the TagKey from the returned information.</li>.
The maximum number of `Filters` per request is 10, and that of `Filter.Values` is 5. the `AutoScalingGroupIds` and `Filters` parameters cannot be specified simultaneously.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Number of returned results. Default value: 20. Maximum value: 100. For more information on `Limit`, see the relevant section in the API [overview](https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Offset. Default value: 0. For more information on `Offset`, see the relevant section in the API [overview](https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupIds = 'AutoScalingGroupIds' in params ? params.AutoScalingGroupIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * Information set of eligible launch configurations.
 * @class
 */
class LaunchConfiguration extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID of the instance.
         * @type {number || null}
         */
        this.ProjectId = null;

        /**
         * Launch configuration ID
         * @type {string || null}
         */
        this.LaunchConfigurationId = null;

        /**
         * Launch configuration name.
         * @type {string || null}
         */
        this.LaunchConfigurationName = null;

        /**
         * Instance model.
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * Information of the instance's system disk configuration.
         * @type {SystemDisk || null}
         */
        this.SystemDisk = null;

        /**
         * Information of the instance's data disk configuration.
         * @type {Array.<DataDisk> || null}
         */
        this.DataDisks = null;

        /**
         * Instance login settings.
         * @type {LimitedLoginSettings || null}
         */
        this.LoginSettings = null;

        /**
         * Information of the public network bandwidth configuration.
         * @type {InternetAccessible || null}
         */
        this.InternetAccessible = null;

        /**
         * Security group of the instance.
         * @type {Array.<string> || null}
         */
        this.SecurityGroupIds = null;

        /**
         * Auto scaling group associated with the launch configuration.
         * @type {Array.<AutoScalingGroupAbstract> || null}
         */
        this.AutoScalingGroupAbstractSet = null;

        /**
         * Custom data.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserData = null;

        /**
         * Specifies the startup configuration creation time. uses UTC standard time.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * Conditions of enhancement services for the instance and their settings.
         * @type {EnhancedService || null}
         */
        this.EnhancedService = null;

        /**
         * Image ID.
         * @type {string || null}
         */
        this.ImageId = null;

        /**
         * Current status of the launch configuration. Valid values: <li>NORMAL: Normal.</li> <li>IMAGE_ABNORMAL: Image exception in the launch configuration.</li> <li>CBS_SNAP_ABNORMAL: Exception with data disk snapshot in the launch configuration.</li> <li>SECURITY_GROUP_ABNORMAL: Security group exception in the launch configuration.</li>
         * @type {string || null}
         */
        this.LaunchConfigurationStatus = null;

        /**
         * Instance billing type. valid values:.
<Li>POSTPAID_BY_HOUR: pay-as-you-go hourly</li>.
<Li>SPOTPAID: spot payment</li>.
<Li>PREPAID: prepaid, i.e., monthly subscription</li>.
<Li>CDCPAID: dedicated cluster payment</li>.
         * @type {string || null}
         */
        this.InstanceChargeType = null;

        /**
         * Market options of the instance, such as parameters related to spot instances. This parameter is required for spot instances.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {InstanceMarketOptionsRequest || null}
         */
        this.InstanceMarketOptions = null;

        /**
         * List of instance models.
         * @type {Array.<string> || null}
         */
        this.InstanceTypes = null;

        /**
         * List of instance tags, which will be added to instances created by the scale-out activity. Up to 10 tags allowed.
         * @type {Array.<InstanceTag> || null}
         */
        this.InstanceTags = null;

        /**
         * Tag list. this parameter specifies tags only used for binding the launch configuration and will not be passed to CVM instances scaled out based on it.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Version
         * @type {number || null}
         */
        this.VersionNumber = null;

        /**
         * Last update time is in standard UTC time.
         * @type {string || null}
         */
        this.UpdatedTime = null;

        /**
         * Role name of the CAM role. can be obtained from roleName in the return value from the DescribeRoleList API (https://intl.cloud.tencent.com/document/product/598/36223?from_cn_redirect=1).
         * @type {string || null}
         */
        this.CamRoleName = null;

        /**
         * Value of InstanceTypesCheckPolicy upon the last operation.
         * @type {string || null}
         */
        this.LastOperationInstanceTypesCheckPolicy = null;

        /**
         * CVM hostname settings.
         * @type {HostNameSettings || null}
         */
        this.HostNameSettings = null;

        /**
         * Settings of CVM instance names
         * @type {InstanceNameSettings || null}
         */
        this.InstanceNameSettings = null;

        /**
         * Details of the monthly subscription, including the purchase period, auto-renewal. It is required if the `InstanceChargeType` is `PREPAID`.
         * @type {InstanceChargePrepaid || null}
         */
        this.InstanceChargePrepaid = null;

        /**
         * Cloud disk type selection policy. Valid values: <li>ORIGINAL: Use the set cloud disk type.</li> <li>AUTOMATIC: Automatically select available cloud disk types in the current availability zone.</li>
         * @type {string || null}
         */
        this.DiskTypePolicy = null;

        /**
         * HPC ID<br>
Note: This field is default to empty
         * @type {string || null}
         */
        this.HpcClusterId = null;

        /**
         * IPv6 public network bandwidth configuration.
         * @type {IPv6InternetAccessible || null}
         */
        this.IPv6InternetAccessible = null;

        /**
         * Placement group ID, supporting specification of only one.
         * @type {Array.<string> || null}
         */
        this.DisasterRecoverGroupIds = null;

        /**
         * Image family name.
         * @type {string || null}
         */
        this.ImageFamily = null;

        /**
         * CDC ID.
         * @type {string || null}
         */
        this.DedicatedClusterId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.LaunchConfigurationId = 'LaunchConfigurationId' in params ? params.LaunchConfigurationId : null;
        this.LaunchConfigurationName = 'LaunchConfigurationName' in params ? params.LaunchConfigurationName : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;

        if (params.SystemDisk) {
            let obj = new SystemDisk();
            obj.deserialize(params.SystemDisk)
            this.SystemDisk = obj;
        }

        if (params.DataDisks) {
            this.DataDisks = new Array();
            for (let z in params.DataDisks) {
                let obj = new DataDisk();
                obj.deserialize(params.DataDisks[z]);
                this.DataDisks.push(obj);
            }
        }

        if (params.LoginSettings) {
            let obj = new LimitedLoginSettings();
            obj.deserialize(params.LoginSettings)
            this.LoginSettings = obj;
        }

        if (params.InternetAccessible) {
            let obj = new InternetAccessible();
            obj.deserialize(params.InternetAccessible)
            this.InternetAccessible = obj;
        }
        this.SecurityGroupIds = 'SecurityGroupIds' in params ? params.SecurityGroupIds : null;

        if (params.AutoScalingGroupAbstractSet) {
            this.AutoScalingGroupAbstractSet = new Array();
            for (let z in params.AutoScalingGroupAbstractSet) {
                let obj = new AutoScalingGroupAbstract();
                obj.deserialize(params.AutoScalingGroupAbstractSet[z]);
                this.AutoScalingGroupAbstractSet.push(obj);
            }
        }
        this.UserData = 'UserData' in params ? params.UserData : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

        if (params.EnhancedService) {
            let obj = new EnhancedService();
            obj.deserialize(params.EnhancedService)
            this.EnhancedService = obj;
        }
        this.ImageId = 'ImageId' in params ? params.ImageId : null;
        this.LaunchConfigurationStatus = 'LaunchConfigurationStatus' in params ? params.LaunchConfigurationStatus : null;
        this.InstanceChargeType = 'InstanceChargeType' in params ? params.InstanceChargeType : null;

        if (params.InstanceMarketOptions) {
            let obj = new InstanceMarketOptionsRequest();
            obj.deserialize(params.InstanceMarketOptions)
            this.InstanceMarketOptions = obj;
        }
        this.InstanceTypes = 'InstanceTypes' in params ? params.InstanceTypes : null;

        if (params.InstanceTags) {
            this.InstanceTags = new Array();
            for (let z in params.InstanceTags) {
                let obj = new InstanceTag();
                obj.deserialize(params.InstanceTags[z]);
                this.InstanceTags.push(obj);
            }
        }

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.VersionNumber = 'VersionNumber' in params ? params.VersionNumber : null;
        this.UpdatedTime = 'UpdatedTime' in params ? params.UpdatedTime : null;
        this.CamRoleName = 'CamRoleName' in params ? params.CamRoleName : null;
        this.LastOperationInstanceTypesCheckPolicy = 'LastOperationInstanceTypesCheckPolicy' in params ? params.LastOperationInstanceTypesCheckPolicy : null;

        if (params.HostNameSettings) {
            let obj = new HostNameSettings();
            obj.deserialize(params.HostNameSettings)
            this.HostNameSettings = obj;
        }

        if (params.InstanceNameSettings) {
            let obj = new InstanceNameSettings();
            obj.deserialize(params.InstanceNameSettings)
            this.InstanceNameSettings = obj;
        }

        if (params.InstanceChargePrepaid) {
            let obj = new InstanceChargePrepaid();
            obj.deserialize(params.InstanceChargePrepaid)
            this.InstanceChargePrepaid = obj;
        }
        this.DiskTypePolicy = 'DiskTypePolicy' in params ? params.DiskTypePolicy : null;
        this.HpcClusterId = 'HpcClusterId' in params ? params.HpcClusterId : null;

        if (params.IPv6InternetAccessible) {
            let obj = new IPv6InternetAccessible();
            obj.deserialize(params.IPv6InternetAccessible)
            this.IPv6InternetAccessible = obj;
        }
        this.DisasterRecoverGroupIds = 'DisasterRecoverGroupIds' in params ? params.DisasterRecoverGroupIds : null;
        this.ImageFamily = 'ImageFamily' in params ? params.ImageFamily : null;
        this.DedicatedClusterId = 'DedicatedClusterId' in params ? params.DedicatedClusterId : null;

    }
}

/**
 * Custom Metadata
 * @class
 */
class Metadata extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom metadata key-value pair list.
         * @type {Array.<MetadataItem> || null}
         */
        this.Items = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Items) {
            this.Items = new Array();
            for (let z in params.Items) {
                let obj = new MetadataItem();
                obj.deserialize(params.Items[z]);
                this.Items.push(obj);
            }
        }

    }
}

/**
 * DescribeAccountLimits response structure.
 * @class
 */
class DescribeAccountLimitsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Maximum number of launch configurations allowed for creation by the user account
         * @type {number || null}
         */
        this.MaxNumberOfLaunchConfigurations = null;

        /**
         * Current number of launch configurations under the user account
         * @type {number || null}
         */
        this.NumberOfLaunchConfigurations = null;

        /**
         * Maximum number of auto scaling groups allowed for creation by the user account
         * @type {number || null}
         */
        this.MaxNumberOfAutoScalingGroups = null;

        /**
         * Current number of auto scaling groups under the user account
         * @type {number || null}
         */
        this.NumberOfAutoScalingGroups = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MaxNumberOfLaunchConfigurations = 'MaxNumberOfLaunchConfigurations' in params ? params.MaxNumberOfLaunchConfigurations : null;
        this.NumberOfLaunchConfigurations = 'NumberOfLaunchConfigurations' in params ? params.NumberOfLaunchConfigurations : null;
        this.MaxNumberOfAutoScalingGroups = 'MaxNumberOfAutoScalingGroups' in params ? params.MaxNumberOfAutoScalingGroups : null;
        this.NumberOfAutoScalingGroups = 'NumberOfAutoScalingGroups' in params ? params.NumberOfAutoScalingGroups : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateLaunchConfiguration response structure.
 * @class
 */
class CreateLaunchConfigurationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * This parameter is returned when a launch configuration is created through this API, indicating the launch configuration ID.
         * @type {string || null}
         */
        this.LaunchConfigurationId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LaunchConfigurationId = 'LaunchConfigurationId' in params ? params.LaunchConfigurationId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Information of the instances related to the current scaling activity.
 * @class
 */
class RelatedInstance extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Status of the instance in the scaling activity. Valid values:
`INIT`: Initializing
`RUNNING`: Processing the instance
`SUCCESSFUL`: Task succeeded on the instance
`FAILED`: Task failed on the instance
         * @type {string || null}
         */
        this.InstanceStatus = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceStatus = 'InstanceStatus' in params ? params.InstanceStatus : null;

    }
}

/**
 * Suggestions for scaling group configurations.
 * @class
 */
class Advice extends  AbstractModel {
    constructor(){
        super();

        /**
         * Problem Description
         * @type {string || null}
         */
        this.Problem = null;

        /**
         * Problem Details
         * @type {string || null}
         */
        this.Detail = null;

        /**
         * Recommended resolutions
         * @type {string || null}
         */
        this.Solution = null;

        /**
         * Scaling suggestion warning level. Valid values:
<li>WARNING: warning.</li>
<li>CRITICAL: critical.</li>
         * @type {string || null}
         */
        this.Level = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Problem = 'Problem' in params ? params.Problem : null;
        this.Detail = 'Detail' in params ? params.Detail : null;
        this.Solution = 'Solution' in params ? params.Solution : null;
        this.Level = 'Level' in params ? params.Level : null;

    }
}

/**
 * EnterStandby request structure.
 * @class
 */
class EnterStandbyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. obtain available scaling group ids in the following ways:.
<li>Query the scaling group ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group).</li>.
<li>Specifies the scaling group ID obtained by calling the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the return information.</li>.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * List of running instances. non-running instances are not supported. you can obtain available instance ids in the following ways:.
<li>Query instance ID by logging in to the <a href="https://console.cloud.tencent.com/cvm/index">console</a>.</li>.
<li>Specifies the instance ID by calling the api [DescribeInstances](https://intl.cloud.tencent.com/document/api/213/15728?from_cn_redirect=1) and getting `InstanceId` from the return information.</li>.
         * @type {Array.<string> || null}
         */
        this.InstanceIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.InstanceIds = 'InstanceIds' in params ? params.InstanceIds : null;

    }
}

/**
 * CreateLifecycleHook response structure.
 * @class
 */
class CreateLifecycleHookResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Lifecycle hook ID
         * @type {string || null}
         */
        this.LifecycleHookId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LifecycleHookId = 'LifecycleHookId' in params ? params.LifecycleHookId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ClearLaunchConfigurationAttributes response structure.
 * @class
 */
class ClearLaunchConfigurationAttributesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeAutoScalingGroups response structure.
 * @class
 */
class DescribeAutoScalingGroupsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of auto scaling group details.
         * @type {Array.<AutoScalingGroup> || null}
         */
        this.AutoScalingGroupSet = null;

        /**
         * Number of eligible auto scaling groups.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.AutoScalingGroupSet) {
            this.AutoScalingGroupSet = new Array();
            for (let z in params.AutoScalingGroupSet) {
                let obj = new AutoScalingGroup();
                obj.deserialize(params.AutoScalingGroupSet[z]);
                this.AutoScalingGroupSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateScheduledAction request structure.
 * @class
 */
class CreateScheduledActionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. obtain available scaling group ids in the following ways:.
<li>Query the scaling group ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group).</li>.
<li>Specifies the scaling group ID obtained by calling the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the return information.</li>.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Scheduled task name, which can only contain letters, numbers, underscores, hyphens ("-"), and decimal points with a maximum length of 60 bytes and must be unique in an auto scaling group.
         * @type {string || null}
         */
        this.ScheduledActionName = null;

        /**
         * The maximum number of instances set for the auto scaling group when the scheduled task is triggered.
         * @type {number || null}
         */
        this.MaxSize = null;

        /**
         * The minimum number of instances set for the auto scaling group when the scheduled task is triggered.
         * @type {number || null}
         */
        this.MinSize = null;

        /**
         * The desired number of instances set for the auto scaling group when the scheduled task is triggered.
         * @type {number || null}
         */
        this.DesiredCapacity = null;

        /**
         * Initial triggered time of the scheduled task. The value is in `Beijing time` (UTC+8) in the format of `YYYY-MM-DDThh:mm:ss+08:00` according to the `ISO8601` standard.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time of the scheduled task. The value is in `Beijing time` (UTC+8) in the format of `YYYY-MM-DDThh:mm:ss+08:00` according to the `ISO8601` standard. <br><br>This parameter and `Recurrence` need to be specified at the same time. After the end time, the scheduled task will no longer take effect.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * The repeating mode of a scheduled task follows the standard Cron format. the [Recurrence parameter limits](https://intl.cloud.tencent.com/document/product/377/88119?from_cn_redirect=1) in a scheduled task consist of 5 fields separated by spaces, with the structure: minute, hour, date, month, week. this parameter must be simultaneously specified with `EndTime`.
         * @type {string || null}
         */
        this.Recurrence = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.ScheduledActionName = 'ScheduledActionName' in params ? params.ScheduledActionName : null;
        this.MaxSize = 'MaxSize' in params ? params.MaxSize : null;
        this.MinSize = 'MinSize' in params ? params.MinSize : null;
        this.DesiredCapacity = 'DesiredCapacity' in params ? params.DesiredCapacity : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Recurrence = 'Recurrence' in params ? params.Recurrence : null;

    }
}

/**
 * ExitStandby request structure.
 * @class
 */
class ExitStandbyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Auto scaling group ID. obtain available scaling group ids in the following ways:.
<li>Query the scaling group ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group).</li>.
<li>Specifies the scaling group ID obtained by calling the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the return information.</li>.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * List of CVM instances in standby status. you can obtain available instance ID in the following ways:.
<li>Query instance ID by logging in to the <a href="https://console.cloud.tencent.com/cvm/index">console</a>.</li>.
<li>Get the instance ID by calling the api [DescribeInstances](https://intl.cloud.tencent.com/document/api/213/15728?from_cn_redirect=1) and retrieving the `InstanceId` from the returned information.</li>.
         * @type {Array.<string> || null}
         */
        this.InstanceIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.InstanceIds = 'InstanceIds' in params ? params.InstanceIds : null;

    }
}

/**
 * System disk configuration of the launch configuration. If this parameter is not specified, the default value is assigned to it.
 * @class
 */
class SystemDisk extends  AbstractModel {
    constructor(){
        super();

        /**
         * System disk type. for restrictions on the system disk type, see [cloud block storage types](https://intl.cloud.tencent.com/document/product/362/2353?from_cn_redirect=1). valid values:.
<Li>LOCAL_BASIC: local hard disk.</li>.
<Li>LOCAL_SSD: local ssd.</li>.
<Li>CLOUD_BASIC: general cloud disk.</li>.
<Li>CLOUD_PREMIUM: high-performance cloud block storage</li>.
<Li>CLOUD_SSD: cloud ssd</li>.
<Li>CLOUD_BSSD: universal ssd cloud disk</li>.
<Li>CLOUD_HSSD: enhanced ssd cloud disk</li>.
<Li>CLOUD_TSSD: ultra ssd.</li>.
<li>Default value: CLOUD_PREMIUM.</li>
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * System disk size, in GB. Default value: 50.
         * @type {number || null}
         */
        this.DiskSize = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;

    }
}

/**
 * Bidding-related options
 * @class
 */
class SpotMarketOptions extends  AbstractModel {
    constructor(){
        super();

        /**
         * Bidding price such as "1.05"
         * @type {string || null}
         */
        this.MaxPrice = null;

        /**
         * Spot instance type. The value can only be one-time currently. Default value: one-time.
         * @type {string || null}
         */
        this.SpotInstanceType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MaxPrice = 'MaxPrice' in params ? params.MaxPrice : null;
        this.SpotInstanceType = 'SpotInstanceType' in params ? params.SpotInstanceType : null;

    }
}

/**
 * StopAutoScalingInstances response structure.
 * @class
 */
class StopAutoScalingInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The scaling activity ID.
         * @type {string || null}
         */
        this.ActivityId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ActivityId = 'ActivityId' in params ? params.ActivityId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeScalingPolicies request structure.
 * @class
 */
class DescribeScalingPoliciesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Queries by one or more alarm policy IDs in the format of asp-i9vkg894. The maximum number of instances per request is 100. This parameter does not support specifying both `AutoScalingPolicyIds` and `Filters` at the same time.
         * @type {Array.<string> || null}
         */
        this.AutoScalingPolicyIds = null;

        /**
         * Filter criteria

<li> auto-scaling-policy-id - String - required: no - (filter) filter by alert policy id.</li>.
<li> auto-scaling-group-id - String - required: no - (filter) filter by auto scaling group id. obtain the scaling group id by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group) or calling the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the returned information.</li>.
<li>scaling-policy-name - String - required: no - (filter condition) filters by Alarm policy name.</li>.
<li>scaling-policy-type - String - required: no - (filter criteria) filters by Alarm policy type. valid values: SIMPLE, TARGET_TRACKING, representing SIMPLE policy and TARGET TRACKING policy respectively.</li>.
The maximum number of `Filters` per request is 10, and that of `Filter.Values` is 5. the `AutoScalingPolicyIds` and `Filters` parameters cannot be specified simultaneously.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Number of returned results. Default value: 20. Maximum value: 100. For more information on `Limit`, see the relevant section in the API [overview](https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Offset. Default value: 0. For more information on `Offset`, see the relevant section in the API [overview](https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingPolicyIds = 'AutoScalingPolicyIds' in params ? params.AutoScalingPolicyIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * Settings of CVM instance names.
 * @class
 */
class InstanceNameSettings extends  AbstractModel {
    constructor(){
        super();

        /**
         * CVM instance name. Value range: 2-108.
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Type of CVM instance name. Valid values: `ORIGINAL` and `UNIQUE`. Default value: `ORIGINAL`.

`ORIGINAL`: Auto Scaling sends the input parameter `InstanceName` to the CVM directly. The CVM may append a serial number to the `InstanceName`. The `InstanceName` of the instances within the scaling group may conflict.

`UNIQUE`: the input parameter `InstanceName` is the prefix of an instance name. Auto Scaling and CVM expand it. The `InstanceName` of an instance in the scaling group is unique.
         * @type {string || null}
         */
        this.InstanceNameStyle = null;

        /**
         * CVM instance name suffix. The length of the character is within the range of [1, 105], and the combined length with InstanceName should not exceed 107.

Assume the suffix name is suffix and the original instance name is test.0, then the final instance name is test.0.suffix.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceNameSuffix = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.InstanceNameStyle = 'InstanceNameStyle' in params ? params.InstanceNameStyle : null;
        this.InstanceNameSuffix = 'InstanceNameSuffix' in params ? params.InstanceNameSuffix : null;

    }
}

/**
 * Detailed description of scaling activity status
 * @class
 */
class DetailedStatusMessage extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error type
         * @type {string || null}
         */
        this.Code = null;

        /**
         * AZ information
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Instance billing mode
         * @type {string || null}
         */
        this.InstanceChargeType = null;

        /**
         * Subnet ID
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Error message
         * @type {string || null}
         */
        this.Message = null;

        /**
         * Instance type
         * @type {string || null}
         */
        this.InstanceType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Code = 'Code' in params ? params.Code : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceChargeType = 'InstanceChargeType' in params ? params.InstanceChargeType : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.Message = 'Message' in params ? params.Message : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;

    }
}

/**
 * ModifyScheduledAction response structure.
 * @class
 */
class ModifyScheduledActionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AttachLoadBalancers response structure.
 * @class
 */
class AttachLoadBalancersResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling activity ID
         * @type {string || null}
         */
        this.ActivityId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ActivityId = 'ActivityId' in params ? params.ActivityId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ExecuteScalingPolicy response structure.
 * @class
 */
class ExecuteScalingPolicyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling activity ID
         * @type {string || null}
         */
        this.ActivityId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ActivityId = 'ActivityId' in params ? params.ActivityId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Application CLB IDs
 * @class
 */
class ForwardLoadBalancerIdentification extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of the CLB
         * @type {string || null}
         */
        this.LoadBalancerId = null;

        /**
         * Application CLB listener ID
         * @type {string || null}
         */
        this.ListenerId = null;

        /**
         * ID of a forwarding rule. This parameter is required for layer-7 listeners.
         * @type {string || null}
         */
        this.LocationId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LoadBalancerId = 'LoadBalancerId' in params ? params.LoadBalancerId : null;
        this.ListenerId = 'ListenerId' in params ? params.ListenerId : null;
        this.LocationId = 'LocationId' in params ? params.LocationId : null;

    }
}

/**
 * SetInstancesProtection response structure.
 * @class
 */
class SetInstancesProtectionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * StartAutoScalingInstances response structure.
 * @class
 */
class StartAutoScalingInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The scaling activity ID.
         * @type {string || null}
         */
        this.ActivityId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ActivityId = 'ActivityId' in params ? params.ActivityId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CompleteLifecycleAction request structure.
 * @class
 */
class CompleteLifecycleActionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Lifecycle hook ID. you can get the lifecycle hook ID by calling the api [DescribeLifecycleHooks](https://intl.cloud.tencent.com/document/api/377/34452?from_cn_redirect=1) and retrieving the `LifecycleHookId` from the returned information.
         * @type {string || null}
         */
        this.LifecycleHookId = null;

        /**
         * Describes the result of the lifecycle action. valid values are as follows:.
<Li>CONTINUE: default value, means continue execution of capacity expansion or reduction</li>.
<li>ABANDON: for scale-out hooks, CVM instances with hook timeout or failed LifecycleCommand execution will be released directly or moved; for scale-in hooks, scale-in activities will continue.</li>.
         * @type {string || null}
         */
        this.LifecycleActionResult = null;

        /**
         * One of the parameters `InstanceId` or `LifecycleActionToken` is required. you can get the instance ID by logging in to the [console](https://console.cloud.tencent.com/cvm/index) or making an api call to [DescribeInstances](https://intl.cloud.tencent.com/document/api/213/15728?from_cn_redirect=1) and retrieving the `InstanceId` from the returned information.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Lifecycle action token. specifies that one of `InstanceId` or `LifecycleActionToken` must be filled.
The method for accessing the parameter is as follows: when the hook of the `NotificationTarget` parameter is triggered, deliver a message containing the token to the message queue specified in the `NotificationTarget` parameter. the message queue consumer can obtain the token from the message.
         * @type {string || null}
         */
        this.LifecycleActionToken = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LifecycleHookId = 'LifecycleHookId' in params ? params.LifecycleHookId : null;
        this.LifecycleActionResult = 'LifecycleActionResult' in params ? params.LifecycleActionResult : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.LifecycleActionToken = 'LifecycleActionToken' in params ? params.LifecycleActionToken : null;

    }
}

/**
 * CreateScalingPolicy response structure.
 * @class
 */
class CreateScalingPolicyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Alarm trigger policy ID.
         * @type {string || null}
         */
        this.AutoScalingPolicyId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingPolicyId = 'AutoScalingPolicyId' in params ? params.AutoScalingPolicyId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateNotificationConfiguration response structure.
 * @class
 */
class CreateNotificationConfigurationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Notification ID.
         * @type {string || null}
         */
        this.AutoScalingNotificationId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingNotificationId = 'AutoScalingNotificationId' in params ? params.AutoScalingNotificationId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeRefreshActivities request structure.
 * @class
 */
class DescribeRefreshActivitiesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of refresh activity IDs. IDs are formatted like: 'asr-5l2ejpfo'. The upper limit per request is 100. Parameters do not support specifying both RefreshActivityIds and Filters simultaneously.
         * @type {Array.<string> || null}
         */
        this.RefreshActivityIds = null;

        /**
         * Filter criteria

<li> auto-scaling-group-id - String - required: no - (filter) filter by auto scaling group id. obtain the scaling group id by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group) or calling the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the returned information.</li>.
<li> refresh-activity-status-code - String - required: no - (filter criteria) filters by refresh activity status. (INIT: initializing | RUNNING: RUNNING | SUCCESSFUL: activity SUCCESSFUL | FAILED_PAUSE: PAUSE on failure | AUTO_PAUSE: AUTO PAUSE | MANUAL_PAUSE: manually PAUSE | CANCELLED: activity CANCELLED | FAILED: activity FAILED)</li>.
<li> refresh-activity-type - String - required: no - (filter) filter by refresh activity types. (NORMAL: regular refresh activity | ROLLBACK: ROLLBACK refresh activity)</li>.
<li> refresh-activity-id - String - required: no - (filter) filter by refresh activity id.</li>.
<li>The upper limit of Filters per request is 10, and that of Filter.Values is 5. The RefreshActivityIds and Filters parameters cannot be specified at the same time.</li>
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Number of returned pieces. Default value: 20. Maximum value: 100. For further information on Limit, please refer to relevant sections in API [Overview] (https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Offset, 0 by default. For further information on Offset, please refer to relevant sections in API [Overview] (https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RefreshActivityIds = 'RefreshActivityIds' in params ? params.RefreshActivityIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * DescribeLaunchConfigurations response structure.
 * @class
 */
class DescribeLaunchConfigurationsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of eligible launch configurations.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * List of launch configuration details.
         * @type {Array.<LaunchConfiguration> || null}
         */
        this.LaunchConfigurationSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.LaunchConfigurationSet) {
            this.LaunchConfigurationSet = new Array();
            for (let z in params.LaunchConfigurationSet) {
                let obj = new LaunchConfiguration();
                obj.deserialize(params.LaunchConfigurationSet[z]);
                this.LaunchConfigurationSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * RemoveInstances request structure.
 * @class
 */
class RemoveInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. obtain available scaling group ids in the following ways:.
<li>Query the scaling group ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group).</li>.
<li>Specifies the scaling group ID obtained by calling the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the return information.</li>.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * CVM instance ID list. you can obtain available instance ID in the following ways:.
<li>Query instance ID by logging in to the <a href="https://console.cloud.tencent.com/cvm/index">console</a>.</li>.
<li>Specifies the instance ID by calling the api [DescribeInstances](https://intl.cloud.tencent.com/document/api/213/15728?from_cn_redirect=1) and getting `InstanceId` from the return information.</li>.
         * @type {Array.<string> || null}
         */
        this.InstanceIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.InstanceIds = 'InstanceIds' in params ? params.InstanceIds : null;

    }
}

/**
 * DeleteScalingPolicy response structure.
 * @class
 */
class DeleteScalingPolicyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Resource type and tag key-value pair
 * @class
 */
class Tag extends  AbstractModel {
    constructor(){
        super();

        /**
         * Tag key
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Tag value
         * @type {string || null}
         */
        this.Value = null;

        /**
         * Specifies the resource type bound to the tag. type currently supported: "auto-scaling-group", "launch-configuration". valid values: scaling group resources and launch configuration resources respectively.
         * @type {string || null}
         */
        this.ResourceType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Key = 'Key' in params ? params.Key : null;
        this.Value = 'Value' in params ? params.Value : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;

    }
}

/**
 * DetachLoadBalancers request structure.
 * @class
 */
class DetachLoadBalancersRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. obtain the scaling group ID by logging in to the console (https://console.cloud.tencent.com/autoscaling/group) or calling the api DescribeAutoScalingGroups (https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1), and retrieve AutoScalingGroupId from the returned information.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Specifies a list of classic load balancer ids with a maximum length of 20. either LoadBalancerIds or ForwardLoadBalancerIdentifications can be specified at the same time. can be obtained through the [DescribeLoadBalancers](https://intl.cloud.tencent.com/document/product/214/30685?from_cn_redirect=1) api.
         * @type {Array.<string> || null}
         */
        this.LoadBalancerIds = null;

        /**
         * Specifies the list of cloud load balancer identification information with a maximum length of 100. either LoadBalancerIds or ForwardLoadBalancerIdentifications can be specified at the same time. can be obtained through the [DescribeLoadBalancers](https://intl.cloud.tencent.com/document/product/214/30685?from_cn_redirect=1) api.
         * @type {Array.<ForwardLoadBalancerIdentification> || null}
         */
        this.ForwardLoadBalancerIdentifications = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.LoadBalancerIds = 'LoadBalancerIds' in params ? params.LoadBalancerIds : null;

        if (params.ForwardLoadBalancerIdentifications) {
            this.ForwardLoadBalancerIdentifications = new Array();
            for (let z in params.ForwardLoadBalancerIdentifications) {
                let obj = new ForwardLoadBalancerIdentification();
                obj.deserialize(params.ForwardLoadBalancerIdentifications[z]);
                this.ForwardLoadBalancerIdentifications.push(obj);
            }
        }

    }
}

/**
 * DescribeAutoScalingInstances request structure.
 * @class
 */
class DescribeAutoScalingInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * IDs of the CVM instances to query. the instance ID list has a length limit of 100. `InstanceIds` and `Filters` cannot be specified simultaneously.
You can get available instance ids in the following ways:.
<li>Query instance ID by logging in to the <a href="https://console.cloud.tencent.com/cvm/index">console</a>.</li>.
<li>Get the instance ID by calling the api [DescribeInstances](https://intl.cloud.tencent.com/document/api/213/15728?from_cn_redirect=1) and retrieving the `InstanceId` from the returned information.</li>.
         * @type {Array.<string> || null}
         */
        this.InstanceIds = null;

        /**
         * Filter criteria

<li> instance-id - String - required: no - (filter condition) filter by instance id. get the instance id by logging in to the [console](https://console.cloud.tencent.com/cvm/index) or making an api call to [DescribeInstances](https://intl.cloud.tencent.com/document/api/213/15728?from_cn_redirect=1), and retrieve the `InstanceId` from the returned information.</li>.
<li> auto-scaling-group-id - String - required: no - (filter) filter by auto scaling group id. you can obtain the scaling group id by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group) or making an api call to [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the returned information.</li>.
The maximum number of `Filters` per request is 10, and the maximum number of `Filter.Values` is 5. parameters do not support specifying both `InstanceIds` and `Filters`.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. Default value: 0. For more information on `Offset`, see the relevant section in the API [overview](https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The number of returned results. Default value: `20`. Maximum value: `100`. For more information on `Limit`, see the relevant sections in API [Introduction](https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceIds = 'InstanceIds' in params ? params.InstanceIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * ModifyLoadBalancers request structure.
 * @class
 */
class ModifyLoadBalancersRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. you can obtain the scaling group ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group) or calling the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the returned information.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * List of classic clb ids. currently, the maximum length is 20. you cannot specify LoadBalancerIds and ForwardLoadBalancers at the same time. it can be obtained through the [DescribeLoadBalancers](https://intl.cloud.tencent.com/document/product/214/30685?from_cn_redirect=1) api.
         * @type {Array.<string> || null}
         */
        this.LoadBalancerIds = null;

        /**
         * Specifies the list of load balancers with a current maximum length of 100. either LoadBalancerIds or ForwardLoadBalancers can be specified at the same time. can be obtained through the [DescribeLoadBalancers](https://intl.cloud.tencent.com/document/product/214/30685?from_cn_redirect=1) api.
         * @type {Array.<ForwardLoadBalancer> || null}
         */
        this.ForwardLoadBalancers = null;

        /**
         * CLB verification policy. Valid values: ALL and DIFF. Default value: ALL.
<li>ALL: The CLB passes the verification only when all CLB parameters are valid. Otherwise, a verification error occurs.</li>
<li>DIFF: The CLB passes the verification only when the CLB parameters with changes are valid. Otherwise, a verification error occurs.</li>
         * @type {string || null}
         */
        this.LoadBalancersCheckPolicy = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.LoadBalancerIds = 'LoadBalancerIds' in params ? params.LoadBalancerIds : null;

        if (params.ForwardLoadBalancers) {
            this.ForwardLoadBalancers = new Array();
            for (let z in params.ForwardLoadBalancers) {
                let obj = new ForwardLoadBalancer();
                obj.deserialize(params.ForwardLoadBalancers[z]);
                this.ForwardLoadBalancers.push(obj);
            }
        }
        this.LoadBalancersCheckPolicy = 'LoadBalancersCheckPolicy' in params ? params.LoadBalancersCheckPolicy : null;

    }
}

/**
 * RemoveInstances response structure.
 * @class
 */
class RemoveInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling activity ID
         * @type {string || null}
         */
        this.ActivityId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ActivityId = 'ActivityId' in params ? params.ActivityId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyScalingPolicy response structure.
 * @class
 */
class ModifyScalingPolicyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteLaunchConfiguration request structure.
 * @class
 */
class DeleteLaunchConfigurationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the launch configuration ID that needs to be deleted. you can obtain the launch configuration ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/config) or calling the api [DescribeLaunchConfigurations](https://intl.cloud.tencent.com/document/api/377/20445?from_cn_redirect=1) and retrieving the LaunchConfigurationId from the returned information.
         * @type {string || null}
         */
        this.LaunchConfigurationId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LaunchConfigurationId = 'LaunchConfigurationId' in params ? params.LaunchConfigurationId : null;

    }
}

/**
 * SetInstancesProtection request structure.
 * @class
 */
class SetInstancesProtectionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Auto scaling group ID. obtain available scaling group ids in the following ways:.
<li>Query the scaling group ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group).</li>.
<li>Specifies the scaling group ID obtained by calling the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the return information.</li>.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Instance ID. you can obtain available instance ID in the following ways:.
<li>Query instance ID by logging in to the <a href="https://console.cloud.tencent.com/cvm/index">console</a>.</li>.
<li>Specifies the instance ID by calling the api [DescribeInstances](https://intl.cloud.tencent.com/document/api/213/15728?from_cn_redirect=1) and getting `InstanceId` from the return information.</li>.
         * @type {Array.<string> || null}
         */
        this.InstanceIds = null;

        /**
         * Whether to enable scale-in protection for this instance
         * @type {boolean || null}
         */
        this.ProtectedFromScaleIn = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.InstanceIds = 'InstanceIds' in params ? params.InstanceIds : null;
        this.ProtectedFromScaleIn = 'ProtectedFromScaleIn' in params ? params.ProtectedFromScaleIn : null;

    }
}

/**
 * DeleteNotificationConfiguration response structure.
 * @class
 */
class DeleteNotificationConfigurationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DetachInstances response structure.
 * @class
 */
class DetachInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling activity ID
         * @type {string || null}
         */
        this.ActivityId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ActivityId = 'ActivityId' in params ? params.ActivityId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Rolling update settings.
 * @class
 */
class RollingUpdateSettings extends  AbstractModel {
    constructor(){
        super();

        /**
         * Batch quantity. The batch quantity should be a positive integer greater than 0, but cannot exceed the total number of instances pending refresh.
         * @type {number || null}
         */
        this.BatchNumber = null;

        /**
         * Pause policy between batches. Default value: Automatic. Valid values:
<li>FIRST_BATCH_PAUSE: Pause after the first batch of updates is completed.</li>
<li>BATCH_INTERVAL_PAUSE: Pause between batches.</li>
<li>AUTOMATIC: Do not pause.</li>
         * @type {string || null}
         */
        this.BatchPause = null;

        /**
         * The maximum additional quantity of instances. After this parameter is set, create a batch of additional pay-as-you-go instances according to the launch configuration before the rolling update starts. After the rolling update is completed, the additional instances will be terminated.This parameter is used to ensure a certain number of instances available during the rolling update. The maximum additional quantity of instances cannot exceed the number of refreshing instances in a single batch of the rolling update. The rollback process does not support this parameter currently.
         * @type {number || null}
         */
        this.MaxSurge = null;

        /**
         * Failure handling strategy. default value: AUTO_PAUSE. valid values:.
<Li>AUTO_PAUSE: suspended after refresh fails</li>.
<li>AUTO_ROLLBACK: roll back after a refresh fails. each batch rolls back one instance during ROLLBACK, and the CheckInstanceTargetHealth parameter value matches the original refresh activity. no need to roll back if the shrinkage process introduced by the MaxSurge parameter fails. a cancel action will replace the ROLLBACK.</li>.
<Li>AUTO_CANCEL: cancel after refresh fails</li>.
         * @type {string || null}
         */
        this.FailProcess = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BatchNumber = 'BatchNumber' in params ? params.BatchNumber : null;
        this.BatchPause = 'BatchPause' in params ? params.BatchPause : null;
        this.MaxSurge = 'MaxSurge' in params ? params.MaxSurge : null;
        this.FailProcess = 'FailProcess' in params ? params.FailProcess : null;

    }
}

/**
 * ModifyLaunchConfigurationAttributes response structure.
 * @class
 */
class ModifyLaunchConfigurationAttributesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateLaunchConfiguration request structure.
 * @class
 */
class CreateLaunchConfigurationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Display name of the launch configuration, which can contain letters, digits, underscores and hyphens (-), and dots. Up to of 60 bytes allowed..
         * @type {string || null}
         */
        this.LaunchConfigurationName = null;

        /**
         * [Image](https://intl.cloud.tencent.com/document/product/213/4940?from_cn_redirect=1) ID in the format of `img-xxx`. There are three types of images: <br/><li>Public images </li><li>Custom images </li><li>Shared images </li><br/>You can obtain the image IDs in the [CVM console](https://console.cloud.tencent.com/cvm/image?rid=1&imageType=PUBLIC_IMAGE).</li><li>You can also use the [DescribeImages](https://intl.cloud.tencent.com/document/api/213/15715?from_cn_redirect=1) and look for `ImageId` in the response.</li>
         * @type {string || null}
         */
        this.ImageId = null;

        /**
         * Project ID of the launch configuration. default value is 0, indicating usage of the default project. obtain this parameter by calling the projectId field in the return value of [DescribeProject](https://intl.cloud.tencent.com/document/api/651/78725?from_cn_redirect=1).
Note: the instance's project ID within the scaling group takes the project ID of the scaling group, which is irrelevant here.
         * @type {number || null}
         */
        this.ProjectId = null;

        /**
         * Instance model. Different instance models specify different resource specifications. The specific value can be obtained by calling the [DescribeInstanceTypeConfigs](https://intl.cloud.tencent.com/document/api/213/15749?from_cn_redirect=1) API to get the latest specification table or referring to the descriptions in [Instance Types](https://intl.cloud.tencent.com/document/product/213/11518?from_cn_redirect=1).
`InstanceType` and `InstanceTypes` are mutually exclusive, and one and only one of them must be entered.
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * System disk configuration of the instance. If this parameter is not specified, the default value will be used.
         * @type {SystemDisk || null}
         */
        this.SystemDisk = null;

        /**
         * Information of the instance's data disk configuration. If this parameter is not specified, no data disk is purchased by default. Up to 11 data disks can be supported.
         * @type {Array.<DataDisk> || null}
         */
        this.DataDisks = null;

        /**
         * Configuration of public network bandwidth. If this parameter is not specified, 0 Mbps will be used by default.
         * @type {InternetAccessible || null}
         */
        this.InternetAccessible = null;

        /**
         * Login settings of the instance. You can use this parameter to set the login method, password, and key of the instance or keep the login settings of the original image. By default, a random password will be generated and sent to you via the Message Center.
         * @type {LoginSettings || null}
         */
        this.LoginSettings = null;

        /**
         * The security group to which the instance belongs. This parameter can be obtained by calling the `SecurityGroupId` field in the returned value of [DescribeSecurityGroups](https://intl.cloud.tencent.com/document/api/215/15808?from_cn_redirect=1). If this parameter is not specified, no security group will be bound by default.
         * @type {Array.<string> || null}
         */
        this.SecurityGroupIds = null;

        /**
         * Enhanced services. You can use this parameter to specify whether to enable services such as Cloud Security and Cloud Monitor. If this parameter is not specified, Cloud Monitor and Cloud Security will be enabled by default.
         * @type {EnhancedService || null}
         */
        this.EnhancedService = null;

        /**
         * Base64-encoded custom data of up to 16 KB.
         * @type {string || null}
         */
        this.UserData = null;

        /**
         * Instance billing mode. CVM instances take `POSTPAID_BY_HOUR` by default. Valid values:
<li>POSTPAID_BY_HOUR: pay-as-you-go hourly</li>
<li>SPOTPAID: spot instance</li>
<li> CDCPAID: dedicated cluster</li>
         * @type {string || null}
         */
        this.InstanceChargeType = null;

        /**
         * Market options of the instance, such as parameters related to spot instances. This parameter is required for spot instances.
         * @type {InstanceMarketOptionsRequest || null}
         */
        this.InstanceMarketOptions = null;

        /**
         * Instance model list. different instance models specify different resource specifications. supports up to 10 instance models.
The `InstanceType` and `InstanceTypes` parameters are mutually exclusive. one and only one must be filled in. specific values can be obtained by calling the api [DescribeInstanceTypeConfigs](https://intl.cloud.tencent.com/document/api/213/15749?from_cn_redirect=1) to obtain the latest specification table or refer to [instance specifications](https://intl.cloud.tencent.com/document/product/213/11518?from_cn_redirect=1).
         * @type {Array.<string> || null}
         */
        this.InstanceTypes = null;

        /**
         * CAM role name. you can obtain it from the roleName in the return value from the API [DescribeRoleList](https://intl.cloud.tencent.com/document/product/598/36223?from_cn_redirect=1).
         * @type {string || null}
         */
        this.CamRoleName = null;

        /**
         * Instance type validation policy. valid values include ALL and ANY. default value: ANY. this parameter is valid only when the InstanceTypes parameter contains multiple instance types.
<li>ALL: verification passes if ALL instancetypes are available; otherwise, a verification error will be reported.</li>.
<li>ANY: verification passes if ANY InstanceType is available; otherwise, a verification error will be reported.</li>.

Common reasons for unavailable instancetypes include the instancetype being sold out and the corresponding cloud disk being sold out.
If a model in InstanceTypes does not exist or has been abolished, a verification error will be reported regardless of the valid values set for InstanceTypesCheckPolicy.
         * @type {string || null}
         */
        this.InstanceTypesCheckPolicy = null;

        /**
         * List of tags. This parameter is used to bind up to 10 tags to newly added instances.
         * @type {Array.<InstanceTag> || null}
         */
        this.InstanceTags = null;

        /**
         * List of tags. You can specify tags that you want to bind to the launch configuration. Each launch configuration can have up to 30 tags.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * CVM hostname settings.
         * @type {HostNameSettings || null}
         */
        this.HostNameSettings = null;

        /**
         * Settings of CVM instance names
If this field is configured in a launch configuration, the `InstanceName` of a CVM created by the scaling group will be generated according to the configuration; otherwise, it will be in the `as-{{AutoScalingGroupName }}` format.
         * @type {InstanceNameSettings || null}
         */
        this.InstanceNameSettings = null;

        /**
         * Details of the monthly subscription, including the purchase period, auto-renewal. It is required if the `InstanceChargeType` is `PREPAID`.
         * @type {InstanceChargePrepaid || null}
         */
        this.InstanceChargePrepaid = null;

        /**
         * Cloud disk type selection policy, whose default value is ORIGINAL. Valid values:
<li>ORIGINAL: Use the set cloud disk type.</li>
<li>AUTOMATIC: Automatically select the currently available cloud disk type.</li>
         * @type {string || null}
         */
        this.DiskTypePolicy = null;

        /**
         * High-Performance computing cluster ID. you can obtain this parameter by calling the [DescribeHpcClusters](https://intl.cloud.tencent.com/document/product/213/83220?from_cn_redirect=1) api.
Note: this field is empty by default.
         * @type {string || null}
         */
        this.HpcClusterId = null;

        /**
         * IPv6 public network bandwidth configuration. If the IPv6 address is available in the new instance, public network bandwidth can be allocated to the IPv6 address. This parameter is invalid if `Ipv6AddressCount` of the scaling group associated with the launch configuration is 0.
         * @type {IPv6InternetAccessible || null}
         */
        this.IPv6InternetAccessible = null;

        /**
         * Placement group ID. Only one is allowed.
         * @type {Array.<string> || null}
         */
        this.DisasterRecoverGroupIds = null;

        /**
         * Image family name. one and only one must be filled in between image Id and image family name. this parameter can be obtained by calling the [DescribeImages](https://intl.cloud.tencent.com/document/product/213/15715?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.ImageFamily = null;

        /**
         * Local exclusive cluster ID. this parameter can be obtained through the [DescribeDedicatedClusters](https://intl.cloud.tencent.com/document/product/1346/73758?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.DedicatedClusterId = null;

        /**
         * Custom metadata.
         * @type {Metadata || null}
         */
        this.Metadata = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LaunchConfigurationName = 'LaunchConfigurationName' in params ? params.LaunchConfigurationName : null;
        this.ImageId = 'ImageId' in params ? params.ImageId : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;

        if (params.SystemDisk) {
            let obj = new SystemDisk();
            obj.deserialize(params.SystemDisk)
            this.SystemDisk = obj;
        }

        if (params.DataDisks) {
            this.DataDisks = new Array();
            for (let z in params.DataDisks) {
                let obj = new DataDisk();
                obj.deserialize(params.DataDisks[z]);
                this.DataDisks.push(obj);
            }
        }

        if (params.InternetAccessible) {
            let obj = new InternetAccessible();
            obj.deserialize(params.InternetAccessible)
            this.InternetAccessible = obj;
        }

        if (params.LoginSettings) {
            let obj = new LoginSettings();
            obj.deserialize(params.LoginSettings)
            this.LoginSettings = obj;
        }
        this.SecurityGroupIds = 'SecurityGroupIds' in params ? params.SecurityGroupIds : null;

        if (params.EnhancedService) {
            let obj = new EnhancedService();
            obj.deserialize(params.EnhancedService)
            this.EnhancedService = obj;
        }
        this.UserData = 'UserData' in params ? params.UserData : null;
        this.InstanceChargeType = 'InstanceChargeType' in params ? params.InstanceChargeType : null;

        if (params.InstanceMarketOptions) {
            let obj = new InstanceMarketOptionsRequest();
            obj.deserialize(params.InstanceMarketOptions)
            this.InstanceMarketOptions = obj;
        }
        this.InstanceTypes = 'InstanceTypes' in params ? params.InstanceTypes : null;
        this.CamRoleName = 'CamRoleName' in params ? params.CamRoleName : null;
        this.InstanceTypesCheckPolicy = 'InstanceTypesCheckPolicy' in params ? params.InstanceTypesCheckPolicy : null;

        if (params.InstanceTags) {
            this.InstanceTags = new Array();
            for (let z in params.InstanceTags) {
                let obj = new InstanceTag();
                obj.deserialize(params.InstanceTags[z]);
                this.InstanceTags.push(obj);
            }
        }

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }

        if (params.HostNameSettings) {
            let obj = new HostNameSettings();
            obj.deserialize(params.HostNameSettings)
            this.HostNameSettings = obj;
        }

        if (params.InstanceNameSettings) {
            let obj = new InstanceNameSettings();
            obj.deserialize(params.InstanceNameSettings)
            this.InstanceNameSettings = obj;
        }

        if (params.InstanceChargePrepaid) {
            let obj = new InstanceChargePrepaid();
            obj.deserialize(params.InstanceChargePrepaid)
            this.InstanceChargePrepaid = obj;
        }
        this.DiskTypePolicy = 'DiskTypePolicy' in params ? params.DiskTypePolicy : null;
        this.HpcClusterId = 'HpcClusterId' in params ? params.HpcClusterId : null;

        if (params.IPv6InternetAccessible) {
            let obj = new IPv6InternetAccessible();
            obj.deserialize(params.IPv6InternetAccessible)
            this.IPv6InternetAccessible = obj;
        }
        this.DisasterRecoverGroupIds = 'DisasterRecoverGroupIds' in params ? params.DisasterRecoverGroupIds : null;
        this.ImageFamily = 'ImageFamily' in params ? params.ImageFamily : null;
        this.DedicatedClusterId = 'DedicatedClusterId' in params ? params.DedicatedClusterId : null;

        if (params.Metadata) {
            let obj = new Metadata();
            obj.deserialize(params.Metadata)
            this.Metadata = obj;
        }

    }
}

/**
 * Auto scaling group
 * @class
 */
class AutoScalingGroup extends  AbstractModel {
    constructor(){
        super();

        /**
         * Auto scaling group ID
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Auto scaling group name
         * @type {string || null}
         */
        this.AutoScalingGroupName = null;

        /**
         * Current status of the scaling group. Valid values:
<li>NORMAL: The scaling group is normal.</li>
<li>CVM_ABNORMAL: The launch configuration is abnormal.</li>
<li>LB_ABNORMAL: The CLB is abnormal.</li>
<li>LB_LISTENER_ABNORMAL: The CLB listener is abnormal.</li>
<li>LB_LOCATION_ABNORMAL: The forwarding configuration of the CLB listener is abnormal.</li>
<li>VPC_ABNORMAL: The VPC is abnormal.</li>
<li>SUBNET_ABNORMAL: The VPC subnet is abnormal.</li>
<li>INSUFFICIENT_BALANCE: The balance is insufficient.</li>
<li>LB_BACKEND_REGION_NOT_MATCH: The region of the CLB instance backend does not match that of the AS service.</li>
<li>LB_BACKEND_VPC_NOT_MATCH: The VPC of the CLB instance does not match that of the scaling group.</li>
         * @type {string || null}
         */
        this.AutoScalingGroupStatus = null;

        /**
         * Creation time in UTC format
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * Default cooldown period in seconds
         * @type {number || null}
         */
        this.DefaultCooldown = null;

        /**
         * Desired number of instances
         * @type {number || null}
         */
        this.DesiredCapacity = null;

        /**
         * Enabled status. Value range: `ENABLED`, `DISABLED`
         * @type {string || null}
         */
        this.EnabledStatus = null;

        /**
         * List of application load balancers
         * @type {Array.<ForwardLoadBalancer> || null}
         */
        this.ForwardLoadBalancerSet = null;

        /**
         * Number of instances
         * @type {number || null}
         */
        this.InstanceCount = null;

        /**
         * Number of instances in `IN_SERVICE` status
         * @type {number || null}
         */
        this.InServiceInstanceCount = null;

        /**
         * Launch configuration ID
         * @type {string || null}
         */
        this.LaunchConfigurationId = null;

        /**
         * Launch configuration name
         * @type {string || null}
         */
        this.LaunchConfigurationName = null;

        /**
         * List of Classic load balancer IDs
         * @type {Array.<string> || null}
         */
        this.LoadBalancerIdSet = null;

        /**
         * Maximum number of instances
         * @type {number || null}
         */
        this.MaxSize = null;

        /**
         * Minimum number of instances
         * @type {number || null}
         */
        this.MinSize = null;

        /**
         * Project ID
         * @type {number || null}
         */
        this.ProjectId = null;

        /**
         * List of subnet IDs
         * @type {Array.<string> || null}
         */
        this.SubnetIdSet = null;

        /**
         * Destruction policy. valid values are as follows:.
<Li>OLDEST_INSTANCE: terminate the oldest instance in the scaling group first, default value.</li>.
<Li>NEWEST_INSTANCE: terminate the newest instance in the scaling group first.</li>.
         * @type {Array.<string> || null}
         */
        this.TerminationPolicySet = null;

        /**
         * VPC ID.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * List of availability zones
         * @type {Array.<string> || null}
         */
        this.ZoneSet = null;

        /**
         * Retry policy. a partially successful scaling operation is considered a failed activity. valid values are as follows:.
<Li>IMMEDIATE_RETRY: default value, means retry immediately, attempting retries in rapid succession over a short period. cease further retries after a certain number of consecutive failures (5).</li>.
<Li>INCREMENTAL_INTERVALS: specifies incremental interval retry. with the number of consecutive failures, the retry interval gradually increases. the first 10 retries are quick retry, and the follow-up retry interval gradually expands to 10 minutes, 30 minutes, 60 minutes, and one day.</li>.
<Li>NO_RETRY: there will be no retry until another user call or Alarm information is received.</li>.
         * @type {string || null}
         */
        this.RetryPolicy = null;

        /**
         * Whether the auto scaling group is performing a scaling activity. `IN_ACTIVITY` indicates yes, and `NOT_IN_ACTIVITY` indicates no.
         * @type {string || null}
         */
        this.InActivityStatus = null;

        /**
         * List of auto scaling group tags
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Service settings
         * @type {ServiceSettings || null}
         */
        this.ServiceSettings = null;

        /**
         * The number of IPv6 addresses that an instance has. valid values: 0 and 1. default value: 0, which means the instance does not allocate an IPv6 address. use a private network that supports ip and enable IPv6 CIDR in the subnet. for usage restrictions, see [IPv6 usage limits](https://intl.cloud.tencent.com/document/product/1142/38369?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Ipv6AddressCount = null;

        /**
         * Multi-AZ/subnet policy.
<li>PRIORITY: The instances are attempted to be created taking the order of the AZ/subnet list as the priority. If the highest-priority AZ/subnet can create instances successfully, instances can always be created in that AZ/subnet.</li>
<li>EQUALITY: Select the AZ/subnet with the least number of instances for scale-out. In this way, each AZ/subnet has an opportunity for scale-out. Instances produced from multiple scale-out operations will be distributed to multiple AZs/subnets.</li>
         * @type {string || null}
         */
        this.MultiZoneSubnetPolicy = null;

        /**
         * Scaling group instance health check type, whose valid values include:
<li>CVM: Determine whether an instance is unhealthy based on its network status. An unhealthy network status is indicated by an event where instances become unreachable via PING. Detailed criteria of judgment can be found in [Instance Health Check](https://intl.cloud.tencent.com/document/product/377/8553?from_cn_redirect=1).</li>
<li>CLB: Determine whether an instance is unhealthy based on the health check status of CLB. For principles behind CLB health checks, see [Health Check](https://intl.cloud.tencent.com/document/product/214/6097?from_cn_redirect=1).</li>
         * @type {string || null}
         */
        this.HealthCheckType = null;

        /**
         * Grace period of the CLB health check. the scaled-out instances IN `IN_SERVICE` will not be marked as `CLB_UNHEALTHY` within the specified time range.
Default value: 0. value range: [0, 7200]. measurement unit: seconds.
         * @type {number || null}
         */
        this.LoadBalancerHealthCheckGracePeriod = null;

        /**
         * Instance assignment policy, whose valid values include LAUNCH_CONFIGURATION and SPOT_MIXED.
<li>LAUNCH_CONFIGURATION: Represent the traditional mode of assigning instances according to the launch configuration.</li>
<li>SPOT_MIXED: Represent the spot mixed mode. Currently, this mode is supported only when the launch configuration is set to the pay-as-you-go billing mode. In the mixed mode, the scaling group will scale out pay-as-you-go models or spot models based on the predefined settings. When the mixed mode is used, the billing type of the associated launch configuration cannot be modified.</li>
         * @type {string || null}
         */
        this.InstanceAllocationPolicy = null;

        /**
         * Specifies how to assign pay-as-you-go instances and spot instances.
A valid value will be returned only when `InstanceAllocationPolicy` is set to `SPOT_MIXED`.
         * @type {SpotMixedAllocationPolicy || null}
         */
        this.SpotMixedAllocationPolicy = null;

        /**
         * Capacity rebalancing feature, which is applicable only to spot instances within the scaling group. Valid values:
<li>TRUE: Enable this feature. When spot instances in the scaling group are about to be automatically recycled by the spot instance service, AS proactively initiates the termination process of the spot instances. If there is a configured scale-in hook, it will be triggered before termination. After the termination process starts, AS asynchronously initiates the scale-out to reach the expected number of instances.</li>
<li>FALSE: Disable this feature. AS waits for the spot instance to be terminated before scaling out to reach the number of instances expected by the scaling group.</li>
         * @type {boolean || null}
         */
        this.CapacityRebalance = null;

        /**
         * Instance name sequencing settings.
         * @type {InstanceNameIndexSettings || null}
         */
        this.InstanceNameIndexSettings = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.AutoScalingGroupName = 'AutoScalingGroupName' in params ? params.AutoScalingGroupName : null;
        this.AutoScalingGroupStatus = 'AutoScalingGroupStatus' in params ? params.AutoScalingGroupStatus : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;
        this.DefaultCooldown = 'DefaultCooldown' in params ? params.DefaultCooldown : null;
        this.DesiredCapacity = 'DesiredCapacity' in params ? params.DesiredCapacity : null;
        this.EnabledStatus = 'EnabledStatus' in params ? params.EnabledStatus : null;

        if (params.ForwardLoadBalancerSet) {
            this.ForwardLoadBalancerSet = new Array();
            for (let z in params.ForwardLoadBalancerSet) {
                let obj = new ForwardLoadBalancer();
                obj.deserialize(params.ForwardLoadBalancerSet[z]);
                this.ForwardLoadBalancerSet.push(obj);
            }
        }
        this.InstanceCount = 'InstanceCount' in params ? params.InstanceCount : null;
        this.InServiceInstanceCount = 'InServiceInstanceCount' in params ? params.InServiceInstanceCount : null;
        this.LaunchConfigurationId = 'LaunchConfigurationId' in params ? params.LaunchConfigurationId : null;
        this.LaunchConfigurationName = 'LaunchConfigurationName' in params ? params.LaunchConfigurationName : null;
        this.LoadBalancerIdSet = 'LoadBalancerIdSet' in params ? params.LoadBalancerIdSet : null;
        this.MaxSize = 'MaxSize' in params ? params.MaxSize : null;
        this.MinSize = 'MinSize' in params ? params.MinSize : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.SubnetIdSet = 'SubnetIdSet' in params ? params.SubnetIdSet : null;
        this.TerminationPolicySet = 'TerminationPolicySet' in params ? params.TerminationPolicySet : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.ZoneSet = 'ZoneSet' in params ? params.ZoneSet : null;
        this.RetryPolicy = 'RetryPolicy' in params ? params.RetryPolicy : null;
        this.InActivityStatus = 'InActivityStatus' in params ? params.InActivityStatus : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }

        if (params.ServiceSettings) {
            let obj = new ServiceSettings();
            obj.deserialize(params.ServiceSettings)
            this.ServiceSettings = obj;
        }
        this.Ipv6AddressCount = 'Ipv6AddressCount' in params ? params.Ipv6AddressCount : null;
        this.MultiZoneSubnetPolicy = 'MultiZoneSubnetPolicy' in params ? params.MultiZoneSubnetPolicy : null;
        this.HealthCheckType = 'HealthCheckType' in params ? params.HealthCheckType : null;
        this.LoadBalancerHealthCheckGracePeriod = 'LoadBalancerHealthCheckGracePeriod' in params ? params.LoadBalancerHealthCheckGracePeriod : null;
        this.InstanceAllocationPolicy = 'InstanceAllocationPolicy' in params ? params.InstanceAllocationPolicy : null;

        if (params.SpotMixedAllocationPolicy) {
            let obj = new SpotMixedAllocationPolicy();
            obj.deserialize(params.SpotMixedAllocationPolicy)
            this.SpotMixedAllocationPolicy = obj;
        }
        this.CapacityRebalance = 'CapacityRebalance' in params ? params.CapacityRebalance : null;

        if (params.InstanceNameIndexSettings) {
            let obj = new InstanceNameIndexSettings();
            obj.deserialize(params.InstanceNameIndexSettings)
            this.InstanceNameIndexSettings = obj;
        }

    }
}

/**
 * AttachInstances response structure.
 * @class
 */
class AttachInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling activity ID
         * @type {string || null}
         */
        this.ActivityId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ActivityId = 'ActivityId' in params ? params.ActivityId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeAutoScalingGroupLastActivities response structure.
 * @class
 */
class DescribeAutoScalingGroupLastActivitiesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Information set of eligible scaling activities. Scaling groups without scaling activities are not returned. For example, if there are 50 auto scaling group IDs but only 45 records are returned, it indicates that 5 of the auto scaling groups do not have scaling activities.
         * @type {Array.<Activity> || null}
         */
        this.ActivitySet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ActivitySet) {
            this.ActivitySet = new Array();
            for (let z in params.ActivitySet) {
                let obj = new Activity();
                obj.deserialize(params.ActivitySet[z]);
                this.ActivitySet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeAccountLimits request structure.
 * @class
 */
class DescribeAccountLimitsRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * ScaleInInstances response structure.
 * @class
 */
class ScaleInInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling activity ID
         * @type {string || null}
         */
        this.ActivityId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ActivityId = 'ActivityId' in params ? params.ActivityId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CancelInstanceRefresh request structure.
 * @class
 */
class CancelInstanceRefreshRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. obtain available scaling group ids in the following ways:.
<li>Query the scaling group ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group).</li>.
<li>Specifies the scaling group ID obtained by calling the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the return information.</li>.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Refresh activity ID. you can obtain the instance refresh activity ID by calling the api [DescribeRefreshActivities](https://intl.cloud.tencent.com/document/api/377/99175?from_cn_redirect=1) and retrieving the RefreshActivityId from the returned information.
         * @type {string || null}
         */
        this.RefreshActivityId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.RefreshActivityId = 'RefreshActivityId' in params ? params.RefreshActivityId : null;

    }
}

/**
 * DetachLoadBalancers response structure.
 * @class
 */
class DetachLoadBalancersResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling activity ID
         * @type {string || null}
         */
        this.ActivityId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ActivityId = 'ActivityId' in params ? params.ActivityId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Alarm trigger policy.
 * @class
 */
class ScalingPolicy extends  AbstractModel {
    constructor(){
        super();

        /**
         * Auto scaling group ID.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Alarm trigger policy ID.
         * @type {string || null}
         */
        this.AutoScalingPolicyId = null;

        /**
         * Scaling policy type. Valid values:
- `SIMPLE`: A simple policy.
- `TARGET_TRACKING`: A target tracking policy.
         * @type {string || null}
         */
        this.ScalingPolicyType = null;

        /**
         * Alarm trigger policy name.
         * @type {string || null}
         */
        this.ScalingPolicyName = null;

        /**
         * The method to adjust the desired capacity after the alarm is triggered. It’s only available when `ScalingPolicyType` is `Simple`. Valid values: <br><li>`CHANGE_IN_CAPACITY`: Increase or decrease the desired capacity </li><li>`EXACT_CAPACITY`: Adjust to the specified desired capacity </li> <li>`PERCENT_CHANGE_IN_CAPACITY`: Adjust the desired capacity by percentage </li>
         * @type {string || null}
         */
        this.AdjustmentType = null;

        /**
         * The adjusted value of desired capacity after the alarm is triggered. This parameter is only applicable to a simple policy.
         * @type {number || null}
         */
        this.AdjustmentValue = null;

        /**
         * Cooldown duration in seconds, applies only to simple policies. value range [0,3600]. default cooldown: 300 seconds.
         * @type {number || null}
         */
        this.Cooldown = null;

        /**
         * Alarm monitoring metrics of a simple policy.
         * @type {MetricAlarm || null}
         */
        this.MetricAlarm = null;

        /**
         * Preset monitoring item. It’s only available when `ScalingPolicyType` is `TARGET_TRACKING`. Valid values: <br><li>ASG_AVG_CPU_UTILIZATION: Average CPU utilization</li><li>ASG_AVG_LAN_TRAFFIC_OUT: Average private bandwidth out</li><li>ASG_AVG_LAN_TRAFFIC_IN: Average private bandwidth in</li><li>ASG_AVG_WAN_TRAFFIC_OUT: Average public bandwidth out</li><li>ASG_AVG_WAN_TRAFFIC_IN: Average public bandwidth in</li>
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PredefinedMetricType = null;

        /**
         * Target value. It’s only available when `ScalingPolicyType` is `TARGET_TRACKING`. Value ranges: <br><li>`ASG_AVG_CPU_UTILIZATION` (in %): [1, 100)</li><li>`ASG_AVG_LAN_TRAFFIC_OUT` (in Mbps): >0</li><li>`ASG_AVG_LAN_TRAFFIC_IN` (in Mbps): >0</li><li>`ASG_AVG_WAN_TRAFFIC_OUT` (in Mbps): >0</li><li>`ASG_AVG_WAN_TRAFFIC_IN` (in Mbps): >0</li>
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TargetValue = null;

        /**
         * Instance warm-up period (in seconds). It’s only available when `ScalingPolicyType` is `TARGET_TRACKING`. Value range: 0-3600.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.EstimatedInstanceWarmup = null;

        /**
         * Whether to disable scale-in. It’s only available when `ScalingPolicyType` is `TARGET_TRACKING`. Valid values: <br><li>`true`: Scaling in is not allowed.</li><li>`false`: Allows both scale-out and scale-in</li>
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.DisableScaleIn = null;

        /**
         * List of alarm monitoring metrics. This parameter is only applicable to a target tracking policy.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {Array.<MetricAlarm> || null}
         */
        this.MetricAlarms = null;

        /**
         * Notification group ID, which is the set of user group IDs.
         * @type {Array.<string> || null}
         */
        this.NotificationUserGroupIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.AutoScalingPolicyId = 'AutoScalingPolicyId' in params ? params.AutoScalingPolicyId : null;
        this.ScalingPolicyType = 'ScalingPolicyType' in params ? params.ScalingPolicyType : null;
        this.ScalingPolicyName = 'ScalingPolicyName' in params ? params.ScalingPolicyName : null;
        this.AdjustmentType = 'AdjustmentType' in params ? params.AdjustmentType : null;
        this.AdjustmentValue = 'AdjustmentValue' in params ? params.AdjustmentValue : null;
        this.Cooldown = 'Cooldown' in params ? params.Cooldown : null;

        if (params.MetricAlarm) {
            let obj = new MetricAlarm();
            obj.deserialize(params.MetricAlarm)
            this.MetricAlarm = obj;
        }
        this.PredefinedMetricType = 'PredefinedMetricType' in params ? params.PredefinedMetricType : null;
        this.TargetValue = 'TargetValue' in params ? params.TargetValue : null;
        this.EstimatedInstanceWarmup = 'EstimatedInstanceWarmup' in params ? params.EstimatedInstanceWarmup : null;
        this.DisableScaleIn = 'DisableScaleIn' in params ? params.DisableScaleIn : null;

        if (params.MetricAlarms) {
            this.MetricAlarms = new Array();
            for (let z in params.MetricAlarms) {
                let obj = new MetricAlarm();
                obj.deserialize(params.MetricAlarms[z]);
                this.MetricAlarms.push(obj);
            }
        }
        this.NotificationUserGroupIds = 'NotificationUserGroupIds' in params ? params.NotificationUserGroupIds : null;

    }
}

/**
 * DescribeAutoScalingGroupLastActivities request structure.
 * @class
 */
class DescribeAutoScalingGroupLastActivitiesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Auto scaling group ID list. obtain the scaling group ID by logging in to the console (https://console.cloud.tencent.com/autoscaling/group) or calling the api DescribeAutoScalingGroups (https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving AutoScalingGroupId from the returned information.
         * @type {Array.<string> || null}
         */
        this.AutoScalingGroupIds = null;

        /**
         * Excludes cancelled type activities when querying. Default value is false, which means cancelled type activities are not excluded.
         * @type {boolean || null}
         */
        this.ExcludeCancelledActivity = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupIds = 'AutoScalingGroupIds' in params ? params.AutoScalingGroupIds : null;
        this.ExcludeCancelledActivity = 'ExcludeCancelledActivity' in params ? params.ExcludeCancelledActivity : null;

    }
}

/**
 * CVM HostName settings
 * @class
 */
class HostNameSettings extends  AbstractModel {
    constructor(){
        super();

        /**
         * CVM HostName.
<li>Dots (.) and hyphens (-) cannot be used as the first or last character of HostName, and cannot be used consecutively.</li>
<li>Windows instances are not supported.</li>
<li>Instances of other types (e.g., Linux): The length of the character should be within the range of [2, 40]. Multiple dots (.) are allowed. Each segment between dot marks can consist of letters (case-insensitive), digits, and hyphens (-). Using only digits is not allowed.</li>
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.HostName = null;

        /**
         * The style of the CVM HostName. Valid values include ORIGINAL and UNIQUE, and the default value is ORIGINAL.
<li>ORIGINAL: AS passes HostName filled in the input parameters to CVM. CVM may append serial numbers to HostName, which can result in conflicts with HostName of instances in the scaling group.</li>
<li> UNIQUE: HostName filled in the input parameters acts as a prefix for the HostName. AS and CVM will expand this prefix to ensure that HostName of the instance in the scaling group is unique.</li>
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.HostNameStyle = null;

        /**
         * HostName suffix for CVM.
<li>Dots (.) and hyphens (-) cannot be used as the first or last character of HostNameSuffix, and cannot be used consecutively.</li>
<li>Windows instances are not supported.</li>
<li>Instances of other types (e.g., Linux): The length of the character should be within the range of [1, 37], and the combined length with HostName should not exceed 39. Multiple dots (.) are allowed. Each segment between dots can consist of letters (case-insensitive), digits, and hyphens (-).</li>
Assume the suffix name is suffix and the original HostName is test.0, then the final HostName is test.0.suffix.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.HostNameSuffix = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.HostName = 'HostName' in params ? params.HostName : null;
        this.HostNameStyle = 'HostNameStyle' in params ? params.HostNameStyle : null;
        this.HostNameSuffix = 'HostNameSuffix' in params ? params.HostNameSuffix : null;

    }
}

/**
 * ModifyLoadBalancers response structure.
 * @class
 */
class ModifyLoadBalancersResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling activity ID
         * @type {string || null}
         */
        this.ActivityId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ActivityId = 'ActivityId' in params ? params.ActivityId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateNotificationConfiguration request structure.
 * @class
 */
class CreateNotificationConfigurationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. obtain the scaling group ID by logging in to the console (https://console.cloud.tencent.com/autoscaling/group) or calling the api DescribeAutoScalingGroups (https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1), and retrieve AutoScalingGroupId from the returned information.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Notification type, i.e., the set of types of notifications to be subscribed to. Value range:
<li>SCALE_OUT_SUCCESSFUL: scale-out succeeded</li>
<li>SCALE_OUT_FAILED: scale-out failed</li>
<li>SCALE_IN_SUCCESSFUL: scale-in succeeded</li>
<li>SCALE_IN_FAILED: scale-in failed</li>
<li>REPLACE_UNHEALTHY_INSTANCE_SUCCESSFUL: unhealthy instance replacement succeeded</li>
<li>REPLACE_UNHEALTHY_INSTANCE_FAILED: unhealthy instance replacement failed</li>
         * @type {Array.<string> || null}
         */
        this.NotificationTypes = null;

        /**
         * Notification GROUP ID, which is the USER GROUP ID collection. USER GROUP ID can be accessed through [ListGroups](https://intl.cloud.tencent.com/document/product/598/34589?from_cn_redirect=1). this parameter is valid only when TargetType is USER_GROUP.
         * @type {Array.<string> || null}
         */
        this.NotificationUserGroupIds = null;

        /**
         * Notification receiver type. values as follows:.
<Li>USER_GROUP: user group</li>.
<Li>TDMQ_CMQ_TOPIC: tdmq cmq topic</li>.
<Li>TDMQ_CMQ_QUEUE: tdmq cmq queue</li>.
<li>CMQ_QUEUE: CMQ QUEUE. [CMQ is offline](https://intl.cloud.tencent.com/document/product/1496/83970?from_cn_redirect=1). currently, only TDMQ CMQ is recommended.</li>.
<li>CMQ_TOPIC: specifies the CMQ TOPIC. [CMQ is offline](https://intl.cloud.tencent.com/document/product/1496/83970?from_cn_redirect=1). currently, TDMQ CMQ is recommended for use.</li>.

Default value: `USER_GROUP`.
         * @type {string || null}
         */
        this.TargetType = null;

        /**
         * TDMQ CMQ QUEUE name. this field is required if TargetType value is `TDMQ_CMQ_QUEUE`.
         * @type {string || null}
         */
        this.QueueName = null;

        /**
         * TDMQ CMQ TOPIC name. this field is required when `TargetType` is `TDMQ_CMQ_TOPIC`.
         * @type {string || null}
         */
        this.TopicName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.NotificationTypes = 'NotificationTypes' in params ? params.NotificationTypes : null;
        this.NotificationUserGroupIds = 'NotificationUserGroupIds' in params ? params.NotificationUserGroupIds : null;
        this.TargetType = 'TargetType' in params ? params.TargetType : null;
        this.QueueName = 'QueueName' in params ? params.QueueName : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;

    }
}

/**
 * DescribeScheduledActions response structure.
 * @class
 */
class DescribeScheduledActionsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of eligible scheduled tasks.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * List of scheduled task details.
         * @type {Array.<ScheduledAction> || null}
         */
        this.ScheduledActionSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.ScheduledActionSet) {
            this.ScheduledActionSet = new Array();
            for (let z in params.ScheduledActionSet) {
                let obj = new ScheduledAction();
                obj.deserialize(params.ScheduledActionSet[z]);
                this.ScheduledActionSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyNotificationConfiguration request structure.
 * @class
 */
class ModifyNotificationConfigurationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the notification ID that needs modification. get the notification ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group) or calling the api [DescribeNotificationConfigurations](https://intl.cloud.tencent.com/document/api/377/33183?from_cn_redirect=1) and getting `AutoScalingNotificationId` from the returned information.
         * @type {string || null}
         */
        this.AutoScalingNotificationId = null;

        /**
         * Notification type, i.e., the set of types of notifications to be subscribed to. Value range:
<li>SCALE_OUT_SUCCESSFUL: scale-out succeeded</li>
<li>SCALE_OUT_FAILED: scale-out failed</li>
<li>SCALE_IN_SUCCESSFUL: scale-in succeeded</li>
<li>SCALE_IN_FAILED: scale-in failed</li>
<li>REPLACE_UNHEALTHY_INSTANCE_SUCCESSFUL: unhealthy instance replacement succeeded</li>
<li>REPLACE_UNHEALTHY_INSTANCE_FAILED: unhealthy instance replacement failed</li>
         * @type {Array.<string> || null}
         */
        this.NotificationTypes = null;

        /**
         * Notification GROUP ID, which is the USER GROUP ID collection. USER GROUP ID can be accessed through [ListGroups](https://intl.cloud.tencent.com/document/product/598/34589?from_cn_redirect=1). this parameter is valid only when `TargetType` is `USER_GROUP`.
         * @type {Array.<string> || null}
         */
        this.NotificationUserGroupIds = null;

        /**
         * The TDMQ CMQ QUEUE name. [the original CMQ is offline](https://intl.cloud.tencent.com/document/product/1496/83970?from_cn_redirect=1). currently, only TDMQ CMQ is recommended for use. this parameter is valid only when `TargetType` is `TDMQ_CMQ_QUEUE`.
         * @type {string || null}
         */
        this.QueueName = null;

        /**
         * The TDMQ CMQ TOPIC name. [original CMQ is offline](https://intl.cloud.tencent.com/document/product/1496/83970?from_cn_redirect=1). currently, only TDMQ CMQ is recommended for use. this parameter is valid only when `TargetType` is `TDMQ_CMQ_TOPIC`.
         * @type {string || null}
         */
        this.TopicName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingNotificationId = 'AutoScalingNotificationId' in params ? params.AutoScalingNotificationId : null;
        this.NotificationTypes = 'NotificationTypes' in params ? params.NotificationTypes : null;
        this.NotificationUserGroupIds = 'NotificationUserGroupIds' in params ? params.NotificationUserGroupIds : null;
        this.QueueName = 'QueueName' in params ? params.QueueName : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;

    }
}

/**
 * DeleteLifecycleHook request structure.
 * @class
 */
class DeleteLifecycleHookRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Lifecycle hook ID. calling the api [DescribeLifecycleHooks](https://intl.cloud.tencent.com/document/api/377/34452?from_cn_redirect=1) and retrieving the LifecycleHookId from the returned information obtains the lifecycle hook ID.
         * @type {string || null}
         */
        this.LifecycleHookId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LifecycleHookId = 'LifecycleHookId' in params ? params.LifecycleHookId : null;

    }
}

/**
 * ModifyLoadBalancerTargetAttributes response structure.
 * @class
 */
class ModifyLoadBalancerTargetAttributesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling activity ID
         * @type {string || null}
         */
        this.ActivityId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ActivityId = 'ActivityId' in params ? params.ActivityId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyAutoScalingGroup response structure.
 * @class
 */
class ModifyAutoScalingGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ExitStandby response structure.
 * @class
 */
class ExitStandbyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling activity ID.
         * @type {string || null}
         */
        this.ActivityId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ActivityId = 'ActivityId' in params ? params.ActivityId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Result of the command execution
 * @class
 */
class InvocationResult extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Execution activity ID.
         * @type {string || null}
         */
        this.InvocationId = null;

        /**
         * Task ID.
         * @type {string || null}
         */
        this.InvocationTaskId = null;

        /**
         * Command ID.
         * @type {string || null}
         */
        this.CommandId = null;

        /**
         * Specifies the execution task status.
         * @type {string || null}
         */
        this.TaskStatus = null;

        /**
         * Specifies the exception information during execution.
         * @type {string || null}
         */
        this.ErrorMessage = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InvocationId = 'InvocationId' in params ? params.InvocationId : null;
        this.InvocationTaskId = 'InvocationTaskId' in params ? params.InvocationTaskId : null;
        this.CommandId = 'CommandId' in params ? params.CommandId : null;
        this.TaskStatus = 'TaskStatus' in params ? params.TaskStatus : null;
        this.ErrorMessage = 'ErrorMessage' in params ? params.ErrorMessage : null;

    }
}

/**
 * ModifyScalingPolicy request structure.
 * @class
 */
class ModifyScalingPolicyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the alert policy ID. obtain the alert policy ID by logging in to the console (https://console.cloud.tencent.com/autoscaling/group) or calling the api DescribeScalingPolicies (https://intl.cloud.tencent.com/document/api/377/33178?from_cn_redirect=1), and retrieve the AutoScalingPolicyId from the returned information.
         * @type {string || null}
         */
        this.AutoScalingPolicyId = null;

        /**
         * The Alarm policy name must be unique in your account. the name length cannot exceed 60 characters. the name only supports chinese, english, digits, underscores, hyphens, and decimal separators.
         * @type {string || null}
         */
        this.ScalingPolicyName = null;

        /**
         * The method to adjust the desired capacity after the alarm is triggered. It’s only available when `ScalingPolicyType` is `Simple`. Valid values: <br><li>`CHANGE_IN_CAPACITY`: Increase or decrease the desired capacity </li><li>`EXACT_CAPACITY`: Adjust to the specified desired capacity </li> <li>`PERCENT_CHANGE_IN_CAPACITY`: Adjust the desired capacity by percentage </li>
         * @type {string || null}
         */
        this.AdjustmentType = null;

        /**
         * The adjustment value for the expected number of instances after an alarm is triggered. It applies only to simple policies. <li>When AdjustmentType is CHANGE_IN_CAPACITY, a positive AdjustmentValue indicates an increase in the number of instances after the alarm is triggered, and a negative AdjustmentValue indicates a decrease in the number of instances after the alarm is triggered.</li> <li>When AdjustmentType is EXACT_CAPACITY, the value of AdjustmentValue represents the expected number of instances after the alarm is triggered, which should be greater than or equal to 0.</li> <li>When AdjustmentType is PERCENT_CHANGE_IN_CAPACITY, a positive AdjustmentValue indicates an increase in the number of instances by percentage after the alarm is triggered, and a negative AdjustmentValue indicates a decrease in the number of instances by percentage after the alarm is triggered. The unit is: %.</li>
         * @type {number || null}
         */
        this.AdjustmentValue = null;

        /**
         * Cooldown period (in seconds). It’s only available when `ScalingPolicyType` is `Simple`.
         * @type {number || null}
         */
        this.Cooldown = null;

        /**
         * Alarm monitoring metric. It’s only available when `ScalingPolicyType` is `Simple`.
         * @type {MetricAlarm || null}
         */
        this.MetricAlarm = null;

        /**
         * Preset monitoring item. It’s only available when `ScalingPolicyType` is `TARGET_TRACKING`. Valid values: <br><li>ASG_AVG_CPU_UTILIZATION: Average CPU utilization</li><li>ASG_AVG_LAN_TRAFFIC_OUT: Average private bandwidth out</li><li>ASG_AVG_LAN_TRAFFIC_IN: Average private bandwidth in</li><li>ASG_AVG_WAN_TRAFFIC_OUT: Average public bandwidth out</li><li>ASG_AVG_WAN_TRAFFIC_IN: Average public bandwidth in</li>
         * @type {string || null}
         */
        this.PredefinedMetricType = null;

        /**
         * Target value. It’s only available when `ScalingPolicyType` is `TARGET_TRACKING`. Value ranges: <br><li>`ASG_AVG_CPU_UTILIZATION` (in %): [1, 100)</li><li>`ASG_AVG_LAN_TRAFFIC_OUT` (in Mbps): >0</li><li>`ASG_AVG_LAN_TRAFFIC_IN` (in Mbps): >0</li><li>`ASG_AVG_WAN_TRAFFIC_OUT` (in Mbps): >0</li><li>`ASG_AVG_WAN_TRAFFIC_IN` (in Mbps): >0</li>
         * @type {number || null}
         */
        this.TargetValue = null;

        /**
         * Instance warm-up period (in seconds). It’s only available when `ScalingPolicyType` is `TARGET_TRACKING`. Value range: 0-3600.
         * @type {number || null}
         */
        this.EstimatedInstanceWarmup = null;

        /**
         * Whether to disable scale-in. It’s only available when `ScalingPolicyType` is `TARGET_TRACKING`. Valid values: <br><li>`true`: Scaling in is not allowed.</li><li>`false`: Allows both scale-out and scale-in</li>
         * @type {boolean || null}
         */
        this.DisableScaleIn = null;

        /**
         * This parameter is diused. Please use [CreateNotificationConfiguration](https://intl.cloud.tencent.com/document/api/377/33185?from_cn_redirect=1) instead.
Notification group ID, which is the set of user group IDs.
         * @type {Array.<string> || null}
         */
        this.NotificationUserGroupIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingPolicyId = 'AutoScalingPolicyId' in params ? params.AutoScalingPolicyId : null;
        this.ScalingPolicyName = 'ScalingPolicyName' in params ? params.ScalingPolicyName : null;
        this.AdjustmentType = 'AdjustmentType' in params ? params.AdjustmentType : null;
        this.AdjustmentValue = 'AdjustmentValue' in params ? params.AdjustmentValue : null;
        this.Cooldown = 'Cooldown' in params ? params.Cooldown : null;

        if (params.MetricAlarm) {
            let obj = new MetricAlarm();
            obj.deserialize(params.MetricAlarm)
            this.MetricAlarm = obj;
        }
        this.PredefinedMetricType = 'PredefinedMetricType' in params ? params.PredefinedMetricType : null;
        this.TargetValue = 'TargetValue' in params ? params.TargetValue : null;
        this.EstimatedInstanceWarmup = 'EstimatedInstanceWarmup' in params ? params.EstimatedInstanceWarmup : null;
        this.DisableScaleIn = 'DisableScaleIn' in params ? params.DisableScaleIn : null;
        this.NotificationUserGroupIds = 'NotificationUserGroupIds' in params ? params.NotificationUserGroupIds : null;

    }
}

/**
 * Options related to a CVM bidding request
 * @class
 */
class InstanceMarketOptionsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Bidding-related options
         * @type {SpotMarketOptions || null}
         */
        this.SpotOptions = null;

        /**
         * Market option type. The value can only be spot currently.
         * @type {string || null}
         */
        this.MarketType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SpotOptions) {
            let obj = new SpotMarketOptions();
            obj.deserialize(params.SpotOptions)
            this.SpotOptions = obj;
        }
        this.MarketType = 'MarketType' in params ? params.MarketType : null;

    }
}

/**
 * Instance refresh batch information, containing the refresh status, instances, start and end time, etc., of the batch.
 * @class
 */
class RefreshBatch extends  AbstractModel {
    constructor(){
        super();

        /**
         * Refresh batch number. For example, a value of 2 indicates that the current batch of instances will be refreshed in the second batch.
         * @type {number || null}
         */
        this.RefreshBatchNum = null;

        /**
         * Refresh batch status. Valid values: <li>WAITING: pending refresh;</li> <li>INIT: initializing;</li> <li>RUNNING: refreshing;</li> <li>FAILED: refresh failed;</li> <li>PARTIALLY_SUCCESSFUL: partially successful in the batch;</li> <li>CANCELLED: cancelled;</li> <li>SUCCESSFUL: refresh successful.</li>
         * @type {string || null}
         */
        this.RefreshBatchStatus = null;

        /**
         * List of instances linked to a refresh batch.
         * @type {Array.<RefreshBatchRelatedInstance> || null}
         */
        this.RefreshBatchRelatedInstanceSet = null;

        /**
         * Refresh batch start time.
Note: This field may return null, indicating that no valid value can be obtained.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * Refresh batch end time.
Note: This field may return null, indicating that no valid value can be obtained.
         * @type {string || null}
         */
        this.EndTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RefreshBatchNum = 'RefreshBatchNum' in params ? params.RefreshBatchNum : null;
        this.RefreshBatchStatus = 'RefreshBatchStatus' in params ? params.RefreshBatchStatus : null;

        if (params.RefreshBatchRelatedInstanceSet) {
            this.RefreshBatchRelatedInstanceSet = new Array();
            for (let z in params.RefreshBatchRelatedInstanceSet) {
                let obj = new RefreshBatchRelatedInstance();
                obj.deserialize(params.RefreshBatchRelatedInstanceSet[z]);
                this.RefreshBatchRelatedInstanceSet.push(obj);
            }
        }
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;

    }
}

/**
 * EnterStandby response structure.
 * @class
 */
class EnterStandbyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling activity ID.
         * @type {string || null}
         */
        this.ActivityId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ActivityId = 'ActivityId' in params ? params.ActivityId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpgradeLifecycleHook response structure.
 * @class
 */
class UpgradeLifecycleHookResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Instance tag. This parameter is used to bind tags to newly added instances.
 * @class
 */
class InstanceTag extends  AbstractModel {
    constructor(){
        super();

        /**
         * Tag key
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Tag value
         * @type {string || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Key = 'Key' in params ? params.Key : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * ModifyLifecycleHook response structure.
 * @class
 */
class ModifyLifecycleHookResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Remote command execution object.
 * @class
 */
class LifecycleCommand extends  AbstractModel {
    constructor(){
        super();

        /**
         * Remote command ID. this item is required if you select to execute command.
         * @type {string || null}
         */
        this.CommandId = null;

        /**
         * Custom parameter. field type is json encoded string, for example: {"varA": "222"}.
key specifies the custom parameter name, and value specifies the default. both are string type.
If the parameter value is not provided, the DefaultParameters of Command will be used to replace it.
Custom parameters support a maximum of 20 entries. the custom parameter name must meet the following standard: number of characters has a cap of 64, value range [a-zA-Z0-9-_].
         * @type {string || null}
         */
        this.Parameters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CommandId = 'CommandId' in params ? params.CommandId : null;
        this.Parameters = 'Parameters' in params ? params.Parameters : null;

    }
}

/**
 * DescribeAutoScalingAdvices response structure.
 * @class
 */
class DescribeAutoScalingAdvicesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * A collection of suggestions for scaling group configurations.
         * @type {Array.<AutoScalingAdvice> || null}
         */
        this.AutoScalingAdviceSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.AutoScalingAdviceSet) {
            this.AutoScalingAdviceSet = new Array();
            for (let z in params.AutoScalingAdviceSet) {
                let obj = new AutoScalingAdvice();
                obj.deserialize(params.AutoScalingAdviceSet[z]);
                this.AutoScalingAdviceSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateAutoScalingGroup request structure.
 * @class
 */
class CreateAutoScalingGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Auto scaling group name, which can only contain letters, numbers, underscores, hyphens ("-"), and decimal points with a maximum length of 55 bytes and must be unique under your account.
         * @type {string || null}
         */
        this.AutoScalingGroupName = null;

        /**
         * Launch configuration ID. you can obtain the launch configuration ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/config) or making an api call to [DescribeLaunchConfigurations](https://intl.cloud.tencent.com/document/api/377/20445?from_cn_redirect=1) and retrieving the LaunchConfigurationId from the returned information.
         * @type {string || null}
         */
        this.LaunchConfigurationId = null;

        /**
         * Maximum instance count. value range [0,2000]. to meet MaxSize >= DesiredCapacity >= MinSize.
         * @type {number || null}
         */
        this.MaxSize = null;

        /**
         * Minimum number of instances. value range: [0,2000]. to meet MaxSize >= DesiredCapacity >= MinSize at the same time.
         * @type {number || null}
         */
        this.MinSize = null;

        /**
         * vpc ID. a valid vpc ID can be queried by logging in to the console (https://console.cloud.tencent.com/vpc/vpc). you can also call the api DescribeVpc (https://intl.cloud.tencent.com/document/api/215/15778?from_cn_redirect=1) and obtain it from the VpcId field in the api response.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Default cooldown period in seconds. default value: 300. value range: [0,3600].
         * @type {number || null}
         */
        this.DefaultCooldown = null;

        /**
         * The expected number of instances, in the range of [0,2000], default value equals current MinSize, and must meet MaxSize >= DesiredCapacity >= MinSize.
         * @type {number || null}
         */
        this.DesiredCapacity = null;

        /**
         * A list of classic load balancer ids with a current maximum length of 20. either LoadBalancerIds or ForwardLoadBalancers can be specified at the same time. can be obtained through the [DescribeLoadBalancers](https://intl.cloud.tencent.com/document/product/214/30685?from_cn_redirect=1) api.
         * @type {Array.<string> || null}
         */
        this.LoadBalancerIds = null;

        /**
         * Project ID of the instance within the scaling group. default value is 0, indicates usage of the default project. obtain this parameter by calling [DescribeProject](https://intl.cloud.tencent.com/document/api/651/78725?from_cn_redirect=1), `projectId` field in the return value.
         * @type {number || null}
         */
        this.ProjectId = null;

        /**
         * Specifies the list of load balancers with a current maximum length of 100. either LoadBalancerIds or ForwardLoadBalancers can be specified at the same time.
         * @type {Array.<ForwardLoadBalancer> || null}
         */
        this.ForwardLoadBalancers = null;

        /**
         * The subnet ID list must specify a subnet in VPC scenarios. multiple subnets are attempted sequentially based on the fill-in order as priority until successful instance creation. effective VPC subnet ids can be queried by logging in to the console (https://console.cloud.tencent.com/VPC/subnet) or obtained from the SubnetId field in the API response by calling the DescribeSubnets API (https://intl.cloud.tencent.com/document/product/215/15784?from_cn_redirect=1).
         * @type {Array.<string> || null}
         */
        this.SubnetIds = null;

        /**
         * Termination policy, whose maximum length is currently 1. Valid values: OLDEST_INSTANCE and NEWEST_INSTANCE. Default value: OLDEST_INSTANCE.
<li>OLDEST_INSTANCE: Terminate the oldest instance in the scaling group first.</li>
<li>NEWEST_INSTANCE: Terminate the newest instance in the scaling group first.</li>
         * @type {Array.<string> || null}
         */
        this.TerminationPolicies = null;

        /**
         * List of availability zones. An availability zone must be specified in the basic network scenario. If multiple availability zones are entered, their priority will be determined by the order in which they are entered, and they will be tried one by one until instances can be successfully created.
         * @type {Array.<string> || null}
         */
        this.Zones = null;

        /**
         * Retry policy. Valid values: IMMEDIATE_RETRY, INCREMENTAL_INTERVALS, and NO_RETRY. Default value: IMMEDIATE_RETRY. A partially successful scaling activity is considered a failed activity.
<li>IMMEDIATE_RETRY: Immediately retry or quickly retry in a short period. There will be no retry anymore after a certain number of consecutive failures (5).</li>
<li>INCREMENTAL_INTERVALS: Retry at an incremental interval. As the number of continuous failures increase, the retry interval gradually increases. The interval for the first 10 retries is the same as the immediate retry mode, and that for the subsequent retries gradually increases to 10 minutes, 30 minutes, 60 minutes, or 1 day.</li>
<li>NO_RETRY: There will be no retry until another user call or alarm information is received.</li>  
         * @type {string || null}
         */
        this.RetryPolicy = null;

        /**
         * AZ verification policy. Valid values: ALL and ANY. Default value: ANY.
<li>ALL: Verification passes if all AZs or subnets are available; otherwise, a verification error will be reported.<li>
<li>ANY: Verification passes if any AZ or subnet is available; otherwise, a verification error will be reported.</li>

Common reasons for unavailable AZs or subnets include the CVM InstanceType in the AZ being sold out, the CBS cloud disk in the AZ being sold out, insufficient quota in the AZ, and insufficient IP addresses in the subnet.
If there is no AZ or subnet in Zones/SubnetIds, a verification error will be reported regardless of the values of ZonesCheckPolicy.
         * @type {string || null}
         */
        this.ZonesCheckPolicy = null;

        /**
         * List of Tag descriptions. by specifying this parameter, you can bind tags to a scaling group and corresponding resource instances. each scaling group supports up to 30 tags. you can call the [GetTags](https://intl.cloud.tencent.com/document/product/651/72275?from_cn_redirect=1) API to retrieve existing Tag key-value pairs based on the response.
         * @type {Array.<Tag> || null}
         */
        this.Tags = null;

        /**
         * Service settings such as unhealthy instance replacement.
         * @type {ServiceSettings || null}
         */
        this.ServiceSettings = null;

        /**
         * The number of IPv6 addresses that an instance has. valid values: 0 and 1. default value: 0, which means the instance does not allocate an IPv6 address. use a private network that supports IPv6 and enable IPv6 CIDR in the subnet. for other usage restrictions, see [IPv6 usage limits](https://intl.cloud.tencent.com/document/product/1142/38369?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Ipv6AddressCount = null;

        /**
         * Multi-AZ/multi-subnet policy, whose valid values include PRIORITY and EQUALITY, with the default value being PRIORITY.
<li>PRIORITY: The instances are attempted to be created taking the order of the AZ/subnet list as the priority. If instances can be successfully created in the highest-priority AZ/subnet, they will always be created in that AZ/subnet.</li>
<li>EQUALITY: The instances added through scale-out will be distributed across multiple AZs/subnets to ensure a relatively balanced number of instances in each AZ/subnet after scaling out.</li>

Points to consider regarding this policy:
<li>When the scaling group is based on a classic network, this policy applies to the multi-AZ; when the scaling group is based on a VPC network, this policy applies to the multi-subnet, in this case, the AZs are no longer considered. For example, if there are four subnets labeled A, B, C, and D, where A, B, and C are in AZ 1 and D is in AZ 2, the subnets A, B, C, and D are considered for sorting without regard to AZs 1 and 2.</li>
<li>This policy applies to the multi-AZ/multi-subnet and not to the InstanceTypes parameter of the launch configuration, which is selected according to the priority policy.</li>
<li>When instances are created according to the PRIORITY policy, ensure the policy for multiple models first, followed by the policy for the multi-AZ/subnet. For example, with models A and B and subnets 1, 2, and 3, attempts will be made in the order of A1, A2, A3, B1, B2, and B3. If A1 is sold out, A2 will be attempted (instead of B1).</li>
         * @type {string || null}
         */
        this.MultiZoneSubnetPolicy = null;

        /**
         * Health check type for scaling group instances. Valid values:
<li>CVM: Determine whether an instance is unhealthy based on its network status. An unhealthy network status is indicated by an event where instances become unreachable via PING. For detailed criteria of judgment, see [Instance Health Check](https://www.tencentcloud.com/document/product/377/8553?lang=en&pg=).</li>
<li>CLB: Determine whether an instance is unhealthy based on the health check status of CLB. For principles behind CLB health checks, see [Health Check Overview](https://www.tencentcloud.com/document/product/214/6097?from_search=1&lang=en&pg=).</li>
If CLB is selected, the scaling group will check both the instance's network status and the CLB's health check status. If the instance's network status is unhealthy, the instance will be marked as UNHEALTHY. If the CLB's health check status is abnormal, the instance will be marked as CLB_UNHEALTHY. If both of them are abnormal, the instance will be marked as UNHEALTHY|CLB_UNHEALTHY. Default value: CLB.
         * @type {string || null}
         */
        this.HealthCheckType = null;

        /**
         * Grace period of the CLB health check during which the `IN_SERVICE` instances added will not be marked as `CLB_UNHEALTHY`.<br>Valid range: 0-7200, in seconds. Default value: `0`.
         * @type {number || null}
         */
        this.LoadBalancerHealthCheckGracePeriod = null;

        /**
         * Instance assignment policy. Valid values: LAUNCH_CONFIGURATION and SPOT_MIXED. Default value: LAUNCH_CONFIGURATION.
<li>LAUNCH_CONFIGURATION: Represent the traditional mode of assigning instances according to the launch configuration.</li>
<li>SPOT_MIXED: Represent the spot mixed mode. Currently, this mode is supported only when the launch configuration is set to the pay-as-you-go billing mode. In the mixed mode, the scaling group will scale out pay-as-you-go models or spot models based on the predefined settings. When the mixed mode is used, the billing type of the associated launch configuration cannot be modified.</li>
         * @type {string || null}
         */
        this.InstanceAllocationPolicy = null;

        /**
         * Specifies how to assign pay-as-you-go instances and spot instances.
This parameter is valid only when `InstanceAllocationPolicy ` is set to `SPOT_MIXED`.
         * @type {SpotMixedAllocationPolicy || null}
         */
        this.SpotMixedAllocationPolicy = null;

        /**
         * Capacity rebalancing feature, which is applicable only to spot instances within the scaling group. Valid values:
<li>TRUE: Enable this feature. When spot instances in the scaling group are about to be automatically recycled by the spot instance service, AS proactively initiates the termination process of the spot instances. If there is a configured scale-in hook, it will be triggered before termination. After the termination process starts, AS asynchronously initiates the scale-out to reach the expected number of instances.</li>
<li>FALSE: Disable this feature. AS waits for the spot instance to be terminated before scaling out to reach the number of instances expected by the scaling group.</li>

Default value: FALSE.
         * @type {boolean || null}
         */
        this.CapacityRebalance = null;

        /**
         * Instance name sequencing settings. If this parameter is not specified, the default is not enabled. When enabled, an incremental numeric sequence will be appended to the names of instances automatically created within the scaling group.
         * @type {InstanceNameIndexSettings || null}
         */
        this.InstanceNameIndexSettings = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupName = 'AutoScalingGroupName' in params ? params.AutoScalingGroupName : null;
        this.LaunchConfigurationId = 'LaunchConfigurationId' in params ? params.LaunchConfigurationId : null;
        this.MaxSize = 'MaxSize' in params ? params.MaxSize : null;
        this.MinSize = 'MinSize' in params ? params.MinSize : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.DefaultCooldown = 'DefaultCooldown' in params ? params.DefaultCooldown : null;
        this.DesiredCapacity = 'DesiredCapacity' in params ? params.DesiredCapacity : null;
        this.LoadBalancerIds = 'LoadBalancerIds' in params ? params.LoadBalancerIds : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;

        if (params.ForwardLoadBalancers) {
            this.ForwardLoadBalancers = new Array();
            for (let z in params.ForwardLoadBalancers) {
                let obj = new ForwardLoadBalancer();
                obj.deserialize(params.ForwardLoadBalancers[z]);
                this.ForwardLoadBalancers.push(obj);
            }
        }
        this.SubnetIds = 'SubnetIds' in params ? params.SubnetIds : null;
        this.TerminationPolicies = 'TerminationPolicies' in params ? params.TerminationPolicies : null;
        this.Zones = 'Zones' in params ? params.Zones : null;
        this.RetryPolicy = 'RetryPolicy' in params ? params.RetryPolicy : null;
        this.ZonesCheckPolicy = 'ZonesCheckPolicy' in params ? params.ZonesCheckPolicy : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new Tag();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }

        if (params.ServiceSettings) {
            let obj = new ServiceSettings();
            obj.deserialize(params.ServiceSettings)
            this.ServiceSettings = obj;
        }
        this.Ipv6AddressCount = 'Ipv6AddressCount' in params ? params.Ipv6AddressCount : null;
        this.MultiZoneSubnetPolicy = 'MultiZoneSubnetPolicy' in params ? params.MultiZoneSubnetPolicy : null;
        this.HealthCheckType = 'HealthCheckType' in params ? params.HealthCheckType : null;
        this.LoadBalancerHealthCheckGracePeriod = 'LoadBalancerHealthCheckGracePeriod' in params ? params.LoadBalancerHealthCheckGracePeriod : null;
        this.InstanceAllocationPolicy = 'InstanceAllocationPolicy' in params ? params.InstanceAllocationPolicy : null;

        if (params.SpotMixedAllocationPolicy) {
            let obj = new SpotMixedAllocationPolicy();
            obj.deserialize(params.SpotMixedAllocationPolicy)
            this.SpotMixedAllocationPolicy = obj;
        }
        this.CapacityRebalance = 'CapacityRebalance' in params ? params.CapacityRebalance : null;

        if (params.InstanceNameIndexSettings) {
            let obj = new InstanceNameIndexSettings();
            obj.deserialize(params.InstanceNameIndexSettings)
            this.InstanceNameIndexSettings = obj;
        }

    }
}

/**
 * DeleteScheduledAction response structure.
 * @class
 */
class DeleteScheduledActionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpgradeLaunchConfiguration request structure.
 * @class
 */
class UpgradeLaunchConfigurationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Launch configuration ID.
         * @type {string || null}
         */
        this.LaunchConfigurationId = null;

        /**
         * [Image](https://intl.cloud.tencent.com/document/product/213/4940?from_cn_redirect=1) ID in the format of `img-xxx`. There are three types of images: <br/><li>Public images </li><li>Custom images </li><li>Shared images </li><br/>You can obtain the image IDs in the [CVM console](https://console.cloud.tencent.com/cvm/image?rid=1&imageType=PUBLIC_IMAGE).</li><li>You can also use the [DescribeImages](https://intl.cloud.tencent.com/document/api/213/15715?from_cn_redirect=1) and look for `ImageId` in the response.</li>
         * @type {string || null}
         */
        this.ImageId = null;

        /**
         * List of instance models. Different instance models specify different resource specifications. Up to 5 instance models can be supported.
         * @type {Array.<string> || null}
         */
        this.InstanceTypes = null;

        /**
         * Display name of the launch configuration, which can contain letters, digits, underscores and hyphens (-), and dots. Up to of 60 bytes allowed..
         * @type {string || null}
         */
        this.LaunchConfigurationName = null;

        /**
         * Information of the instance's data disk configuration. If this parameter is not specified, no data disk is purchased by default. Up to 11 data disks can be supported.
         * @type {Array.<DataDisk> || null}
         */
        this.DataDisks = null;

        /**
         * Enhanced services. You can use this parameter to specify whether to enable services such as Cloud Security and Cloud Monitor. If this parameter is not specified, Cloud Monitor and Cloud Security will be enabled by default.
         * @type {EnhancedService || null}
         */
        this.EnhancedService = null;

        /**
         * Instance billing type. CVM instances are POSTPAID_BY_HOUR by default.
<br><li>POSTPAID_BY_HOUR: Pay-as-you-go on an hourly basis
<br><li>SPOTPAID: Bidding
         * @type {string || null}
         */
        this.InstanceChargeType = null;

        /**
         * Market options of the instance, such as parameters related to spot instances. This parameter is required for spot instances.
         * @type {InstanceMarketOptionsRequest || null}
         */
        this.InstanceMarketOptions = null;

        /**
         * Instance type verification policy. Value range: ALL, ANY. Default value: ANY.
<br><li> ALL: The verification will success only if all instance types (InstanceType) are available; otherwise, an error will be reported.
<br><li> ANY: The verification will success if any instance type (InstanceType) is available; otherwise, an error will be reported.

Common reasons why an instance type is unavailable include stock-out of the instance type or the corresponding cloud disk.
If a model in InstanceTypes does not exist or has been discontinued, a verification error will be reported regardless of the value of InstanceTypesCheckPolicy.
         * @type {string || null}
         */
        this.InstanceTypesCheckPolicy = null;

        /**
         * Configuration of public network bandwidth. If this parameter is not specified, 0 Mbps will be used by default.
         * @type {InternetAccessible || null}
         */
        this.InternetAccessible = null;

        /**
         * This parameter is now invalid and should not be used. Upgrading the launch configuration API does not allow modification or overwriting of the LoginSettings parameter. LoginSettings will not change after upgrade.
         * @type {LoginSettings || null}
         */
        this.LoginSettings = null;

        /**
         * Project ID of the instance. Leave it blank as the default.
         * @type {number || null}
         */
        this.ProjectId = null;

        /**
         * The security group to which the instance belongs. This parameter can be obtained by calling the `SecurityGroupId` field in the returned value of [DescribeSecurityGroups](https://intl.cloud.tencent.com/document/api/215/15808?from_cn_redirect=1). If this parameter is not specified, no security group will be bound by default.
         * @type {Array.<string> || null}
         */
        this.SecurityGroupIds = null;

        /**
         * System disk configuration of the instance. If this parameter is not specified, the default value will be used.
         * @type {SystemDisk || null}
         */
        this.SystemDisk = null;

        /**
         * Base64-encoded custom data of up to 16 KB.
         * @type {string || null}
         */
        this.UserData = null;

        /**
         * List of tags. This parameter is used to bind up to 10 tags to newly added instances.
         * @type {Array.<InstanceTag> || null}
         */
        this.InstanceTags = null;

        /**
         * CAM role name, which can be obtained from the roleName field in the return value of the DescribeRoleList API.
         * @type {string || null}
         */
        this.CamRoleName = null;

        /**
         * CVM hostname settings.
         * @type {HostNameSettings || null}
         */
        this.HostNameSettings = null;

        /**
         * Settings of CVM instance names
         * @type {InstanceNameSettings || null}
         */
        this.InstanceNameSettings = null;

        /**
         * Details of the monthly subscription, including the purchase period, auto-renewal. It is required if the `InstanceChargeType` is `PREPAID`.
         * @type {InstanceChargePrepaid || null}
         */
        this.InstanceChargePrepaid = null;

        /**
         * Selection policy of cloud disks. Default value: ORIGINAL. Valid values:
<br><li>ORIGINAL: uses the configured cloud disk type
<br><li>AUTOMATIC: automatically chooses an available cloud disk type
         * @type {string || null}
         */
        this.DiskTypePolicy = null;

        /**
         * IPv6 public network bandwidth configuration. If the IPv6 address is available in the new instance, public network bandwidth can be allocated to the IPv6 address. This parameter is invalid if `Ipv6AddressCount` of the scaling group associated with the launch configuration is 0.
         * @type {IPv6InternetAccessible || null}
         */
        this.IPv6InternetAccessible = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LaunchConfigurationId = 'LaunchConfigurationId' in params ? params.LaunchConfigurationId : null;
        this.ImageId = 'ImageId' in params ? params.ImageId : null;
        this.InstanceTypes = 'InstanceTypes' in params ? params.InstanceTypes : null;
        this.LaunchConfigurationName = 'LaunchConfigurationName' in params ? params.LaunchConfigurationName : null;

        if (params.DataDisks) {
            this.DataDisks = new Array();
            for (let z in params.DataDisks) {
                let obj = new DataDisk();
                obj.deserialize(params.DataDisks[z]);
                this.DataDisks.push(obj);
            }
        }

        if (params.EnhancedService) {
            let obj = new EnhancedService();
            obj.deserialize(params.EnhancedService)
            this.EnhancedService = obj;
        }
        this.InstanceChargeType = 'InstanceChargeType' in params ? params.InstanceChargeType : null;

        if (params.InstanceMarketOptions) {
            let obj = new InstanceMarketOptionsRequest();
            obj.deserialize(params.InstanceMarketOptions)
            this.InstanceMarketOptions = obj;
        }
        this.InstanceTypesCheckPolicy = 'InstanceTypesCheckPolicy' in params ? params.InstanceTypesCheckPolicy : null;

        if (params.InternetAccessible) {
            let obj = new InternetAccessible();
            obj.deserialize(params.InternetAccessible)
            this.InternetAccessible = obj;
        }

        if (params.LoginSettings) {
            let obj = new LoginSettings();
            obj.deserialize(params.LoginSettings)
            this.LoginSettings = obj;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.SecurityGroupIds = 'SecurityGroupIds' in params ? params.SecurityGroupIds : null;

        if (params.SystemDisk) {
            let obj = new SystemDisk();
            obj.deserialize(params.SystemDisk)
            this.SystemDisk = obj;
        }
        this.UserData = 'UserData' in params ? params.UserData : null;

        if (params.InstanceTags) {
            this.InstanceTags = new Array();
            for (let z in params.InstanceTags) {
                let obj = new InstanceTag();
                obj.deserialize(params.InstanceTags[z]);
                this.InstanceTags.push(obj);
            }
        }
        this.CamRoleName = 'CamRoleName' in params ? params.CamRoleName : null;

        if (params.HostNameSettings) {
            let obj = new HostNameSettings();
            obj.deserialize(params.HostNameSettings)
            this.HostNameSettings = obj;
        }

        if (params.InstanceNameSettings) {
            let obj = new InstanceNameSettings();
            obj.deserialize(params.InstanceNameSettings)
            this.InstanceNameSettings = obj;
        }

        if (params.InstanceChargePrepaid) {
            let obj = new InstanceChargePrepaid();
            obj.deserialize(params.InstanceChargePrepaid)
            this.InstanceChargePrepaid = obj;
        }
        this.DiskTypePolicy = 'DiskTypePolicy' in params ? params.DiskTypePolicy : null;

        if (params.IPv6InternetAccessible) {
            let obj = new IPv6InternetAccessible();
            obj.deserialize(params.IPv6InternetAccessible)
            this.IPv6InternetAccessible = obj;
        }

    }
}

/**
 * DescribeAutoScalingActivities response structure.
 * @class
 */
class DescribeAutoScalingActivitiesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of eligible scaling activities.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Information set of eligible scaling activities.
         * @type {Array.<Activity> || null}
         */
        this.ActivitySet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.ActivitySet) {
            this.ActivitySet = new Array();
            for (let z in params.ActivitySet) {
                let obj = new Activity();
                obj.deserialize(params.ActivitySet[z]);
                this.ActivitySet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeNotificationConfigurations response structure.
 * @class
 */
class DescribeNotificationConfigurationsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of eligible notifications.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * List of AS event notification details.
         * @type {Array.<AutoScalingNotification> || null}
         */
        this.AutoScalingNotificationSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.AutoScalingNotificationSet) {
            this.AutoScalingNotificationSet = new Array();
            for (let z in params.AutoScalingNotificationSet) {
                let obj = new AutoScalingNotification();
                obj.deserialize(params.AutoScalingNotificationSet[z]);
                this.AutoScalingNotificationSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Configuration information of data disk in launch configuration. If this parameter is not specified, no data disk will be purchased by default. You can specify only one data disk when purchasing it.
 * @class
 */
class DataDisk extends  AbstractModel {
    constructor(){
        super();

        /**
         * Data disk type. for restrictions on data disk types, see [cloud block storage types](https://intl.cloud.tencent.com/document/product/362/2353?from_cn_redirect=1). valid values:.
<Li>LOCAL_BASIC: local hard disk.</li>.
<Li>LOCAL_SSD: local ssd.</li>.
<Li>CLOUD_BASIC: general cloud disk.</li>.
<Li>CLOUD_PREMIUM: high-performance cloud block storage</li>.
<Li>CLOUD_SSD: cloud ssd</li>.
<Li>CLOUD_HSSD: enhanced ssd cloud disk</li>.
<Li>CLOUD_TSSD: ultra ssd.</li>.
<Li>CLOUD_BSSD: universal ssd cloud disk</li>.
The default value is consistent with the system disk type (SystemDisk.DiskType).
         * @type {string || null}
         */
        this.DiskType = null;

        /**
         * Data disk size, in GB. the value range varies according to the data disk type. for specific restrictions, see [CVM instance configuration](https://intl.cloud.tencent.com/document/product/213/2177?from_cn_redirect=1). default value: 0, which means no data disk is purchased. for more restrictions, see the [product documentation](https://intl.cloud.tencent.com/document/product/362/5145?from_cn_redirect=1).
         * @type {number || null}
         */
        this.DiskSize = null;

        /**
         * The data disk snapshot ID can be obtained through the [DescribeSnapshots](https://intl.cloud.tencent.com/document/product/362/15647?from_cn_redirect=1) api.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SnapshotId = null;

        /**
         * Whether the data disk is terminated along with the instance. Valid values:
<li>TRUE: When the instance is terminated, the data disk is also terminated. This option is only supported for hourly postpaid cloud disks.</li>
<li>FALSE: When the instance is terminated, the data disk is retained.</li>
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.DeleteWithInstance = null;

        /**
         * Whether the data disk is encrypted. Valid values:
<li>TRUE: Encrypted.</li>
<li>FALSE: Not encrypted.</li>
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.Encrypt = null;

        /**
         * Cloud disk performance (MB/s). This parameter is used to purchase extra performance for the cloud disk. For details on the feature and limits, see [Enhanced SSD Performance](https://intl.cloud.tencent.com/document/product/362/51896?from_cn_redirect=1#. E5.A2.9E.E5.BC.BA.E5.9E.8B-ssd-.E4.BA.91.E7.A1.AC.E7.9B.98.E9.A2.9D.E5.A4.96 .E6.80.A7.E8.83.BD).
This feature is only available to enhanced SSD (`CLOUD_HSSD`) and tremendous SSD (`CLOUD_TSSD`) disks with a capacity greater than 460 GB.
Note: This field may return `null`, indicating that no valid value can be obtained.
         * @type {number || null}
         */
        this.ThroughputPerformance = null;

        /**
         * Burst performance. specifies whether to enable burst performance. default value is false. this parameter only supports ultra-fast CLOUD disk (CLOUD_TSSD) and enhanced SSD CLOUD disk (CLOUD_HSSD) with capacity > 460GB.
Note: this feature is in beta test and requires a ticket to be submitted for usage.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.BurstPerformance = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DiskType = 'DiskType' in params ? params.DiskType : null;
        this.DiskSize = 'DiskSize' in params ? params.DiskSize : null;
        this.SnapshotId = 'SnapshotId' in params ? params.SnapshotId : null;
        this.DeleteWithInstance = 'DeleteWithInstance' in params ? params.DeleteWithInstance : null;
        this.Encrypt = 'Encrypt' in params ? params.Encrypt : null;
        this.ThroughputPerformance = 'ThroughputPerformance' in params ? params.ThroughputPerformance : null;
        this.BurstPerformance = 'BurstPerformance' in params ? params.BurstPerformance : null;

    }
}

/**
 * RollbackInstanceRefresh response structure.
 * @class
 */
class RollbackInstanceRefreshResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Refresh activity ID.
         * @type {string || null}
         */
        this.RefreshActivityId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RefreshActivityId = 'RefreshActivityId' in params ? params.RefreshActivityId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteScalingPolicy request structure.
 * @class
 */
class DeleteScalingPolicyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The Alarm policy ID to be deleted. you can obtain the Alarm policy ID by logging in to the console (https://console.cloud.tencent.com/autoscaling/group) or calling the api [DescribeScalingPolicies](https://intl.cloud.tencent.com/document/api/377/33178?from_cn_redirect=1) and retrieving the AutoScalingPolicyId from the returned information.
         * @type {string || null}
         */
        this.AutoScalingPolicyId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingPolicyId = 'AutoScalingPolicyId' in params ? params.AutoScalingPolicyId : null;

    }
}

/**
 * Describes login settings of an instance.
 * @class
 */
class LoginSettings extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance login password. The password complexity requirements vary according to the operating system type. The details are as follows:
- For a Linux system, the password should contain 8 to 30 characters consisting of at least two of the four character types: lowercase letters, uppercase letters, digits, and special characters.
- For a Windows system, the password should contain 12 to 30 characters consisting of at least three of the four character types: lowercase letters, uppercase letters, digits, and special characters.
- If this parameter is not specified, the system will generate a random password and notify the user via the message centerSupported special characters: ( ) ` ~ ! @ # $ % ^ & * - + = | { } [ ] : ; ' , . ? /
         * @type {string || null}
         */
        this.Password = null;

        /**
         * List of key ids. after associating a key, you can access the instance through the corresponding private key. KeyId can be obtained by calling the api [DescribeKeyPairs](https://intl.cloud.tencent.com/document/api/213/15699?from_cn_redirect=1). key and password cannot be specified simultaneously. the Windows operating system does not support specifying a key. currently, only one key can be specified during purchase.
         * @type {Array.<string> || null}
         */
        this.KeyIds = null;

        /**
         * Retain the original settings of the image. This parameter cannot be specified simultaneously with Password or KeyIds.N. It can only be set to TRUE when you create an instance by using a custom image, shared image, or externally imported image. Valid values:
<li>TRUE: Retain the login settings of the image.</li>
<li>FALSE: Do not retain the login settings of the image.</li> Default value: FALSE.
         * @type {boolean || null}
         */
        this.KeepImageLogin = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Password = 'Password' in params ? params.Password : null;
        this.KeyIds = 'KeyIds' in params ? params.KeyIds : null;
        this.KeepImageLogin = 'KeepImageLogin' in params ? params.KeepImageLogin : null;

    }
}

/**
 * CreateAutoScalingGroupFromInstance response structure.
 * @class
 */
class CreateAutoScalingGroupFromInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The scaling group ID.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DetachInstances request structure.
 * @class
 */
class DetachInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Auto scaling group ID. obtain available scaling group ids in the following ways:.
<li>Query the scaling group ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group).</li>.
<li>Specifies the scaling group ID obtained by calling the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the return information.</li>.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * List of CVM instance ids. you can obtain available instance ids in the following ways:.
<li>Query instance ID by logging in to the <a href="https://console.cloud.tencent.com/cvm/index">console</a>.</li>.
<li>Specifies the instance ID by calling the api [DescribeInstances](https://intl.cloud.tencent.com/document/api/213/15728?from_cn_redirect=1) and getting `InstanceId` from the return information.</li>.
         * @type {Array.<string> || null}
         */
        this.InstanceIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.InstanceIds = 'InstanceIds' in params ? params.InstanceIds : null;

    }
}

/**
 * Instance information
 * @class
 */
class Instance extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Auto scaling group ID
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Launch configuration ID
         * @type {string || null}
         */
        this.LaunchConfigurationId = null;

        /**
         * Launch configuration name
         * @type {string || null}
         */
        this.LaunchConfigurationName = null;

        /**
         * Lifecycle status. valid values are as follows:.
<Li>IN_SERVICE: running</li>.
<Li>CREATING: specifies the instance is being created.</li>.
<Li>CREATION_FAILED: creation failed.</li>.
<Li>`TERMINATING`: the instance is being terminated.</li>.
<Li>`TERMINATION_FAILED`: the instance fails to be terminated.</li>.
<Li>ATTACHING: binding</li>.
<Li>`ATTACH_FAILED`: the instance fails to be bound.</li>.
<Li>DETACHING: specifies the unbinding is in progress.</li>.
<Li>`DETACH_FAILED`: the instance fails to be unbound.</li>.
<Li>`ATTACHING_LB`: binding to lb</li>.
<Li>DETACHING_LB: the lb is being unbound.</li>.
<Li>`MODIFYING_LB`: the lb is being modified.</li>.
<Li>`STARTING`: the instance is being started up.</li>.
<Li>`START_FAILED`: the instance fails to be started up.</li>.
<Li>`STOPPING`: the instance is being shut down.</li>.
<Li>`STOP_FAILED`: the instance fails to be shut down.</li>.
<Li>`STOPPED`: the instance is shut down.</li>.
<Li>`IN_LAUNCHING_HOOK`: the lifecycle hook is being scaled out.</li>.
<Li>`IN_TERMINATING_HOOK`: the lifecycle hook is being scaled in.</li>.
         * @type {string || null}
         */
        this.LifeCycleState = null;

        /**
         * Health status. valid values are as follows:.
<Li>HEALTHY: the instance is in Healthy status.</li>.
<Li>UNHEALTHY: instance ping unreachable</li>.
<Li>CLB_UNHEALTHY: the instance port listened by clb is unhealthy</li>.
         * @type {string || null}
         */
        this.HealthStatus = null;

        /**
         * Whether to add scale-in protection
         * @type {boolean || null}
         */
        this.ProtectedFromScaleIn = null;

        /**
         * Availability zone
         * @type {string || null}
         */
        this.Zone = null;

        /**
         * Creation type. Value range: AUTO_CREATION, MANUAL_ATTACHING.
         * @type {string || null}
         */
        this.CreationType = null;

        /**
         * Instance join time is displayed in a format that conforms to the ISO8601 standard and uses UTC time.
         * @type {string || null}
         */
        this.AddTime = null;

        /**
         * Instance type
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * Version number
         * @type {number || null}
         */
        this.VersionNumber = null;

        /**
         * Auto scaling group name
         * @type {string || null}
         */
        this.AutoScalingGroupName = null;

        /**
         * Preheat status. valid values are as follows:.
<Li>WAITING_ENTER_WARMUP: specifies the instance is waiting to enter preheating.</li>.
<Li>`NO_NEED_WARMUP`: warming up is not required.</li>.
<Li>IN_WARMUP: preheating.</li>.
<Li>AFTER_WARMUP: indicates the preheating is completed.</li>.
         * @type {string || null}
         */
        this.WarmupStatus = null;

        /**
         * Placement group ID. Only one can be specified.
         * @type {Array.<string> || null}
         */
        this.DisasterRecoverGroupIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.LaunchConfigurationId = 'LaunchConfigurationId' in params ? params.LaunchConfigurationId : null;
        this.LaunchConfigurationName = 'LaunchConfigurationName' in params ? params.LaunchConfigurationName : null;
        this.LifeCycleState = 'LifeCycleState' in params ? params.LifeCycleState : null;
        this.HealthStatus = 'HealthStatus' in params ? params.HealthStatus : null;
        this.ProtectedFromScaleIn = 'ProtectedFromScaleIn' in params ? params.ProtectedFromScaleIn : null;
        this.Zone = 'Zone' in params ? params.Zone : null;
        this.CreationType = 'CreationType' in params ? params.CreationType : null;
        this.AddTime = 'AddTime' in params ? params.AddTime : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.VersionNumber = 'VersionNumber' in params ? params.VersionNumber : null;
        this.AutoScalingGroupName = 'AutoScalingGroupName' in params ? params.AutoScalingGroupName : null;
        this.WarmupStatus = 'WarmupStatus' in params ? params.WarmupStatus : null;
        this.DisasterRecoverGroupIds = 'DisasterRecoverGroupIds' in params ? params.DisasterRecoverGroupIds : null;

    }
}

/**
 * DescribeAutoScalingInstances response structure.
 * @class
 */
class DescribeAutoScalingInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of instance details.
         * @type {Array.<Instance> || null}
         */
        this.AutoScalingInstanceSet = null;

        /**
         * Number of eligible instances.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.AutoScalingInstanceSet) {
            this.AutoScalingInstanceSet = new Array();
            for (let z in params.AutoScalingInstanceSet) {
                let obj = new Instance();
                obj.deserialize(params.AutoScalingInstanceSet[z]);
                this.AutoScalingInstanceSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * This describes the conditions and configurations of the enhanced services of the instance, such as cloud security, cloud monitor, TencentCloud Automation Tools, and other instance agents.
 * @class
 */
class EnhancedService extends  AbstractModel {
    constructor(){
        super();

        /**
         * Enables the Cloud Security service. If this parameter is not specified, the Cloud Security service will be enabled by default.
         * @type {RunSecurityServiceEnabled || null}
         */
        this.SecurityService = null;

        /**
         * Enables the Cloud Monitor service. If this parameter is not specified, the Cloud Monitor service will be enabled by default.
         * @type {RunMonitorServiceEnabled || null}
         */
        this.MonitorService = null;

        /**
         * Deprecated parameter.
         * @type {Array.<RunAutomationServiceEnabled> || null}
         */
        this.AutomationService = null;

        /**
         * Enable TAT service. If this parameter is not specified, the default logic is the same as that of the CVM instance. Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {RunAutomationServiceEnabled || null}
         */
        this.AutomationToolsService = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SecurityService) {
            let obj = new RunSecurityServiceEnabled();
            obj.deserialize(params.SecurityService)
            this.SecurityService = obj;
        }

        if (params.MonitorService) {
            let obj = new RunMonitorServiceEnabled();
            obj.deserialize(params.MonitorService)
            this.MonitorService = obj;
        }

        if (params.AutomationService) {
            this.AutomationService = new Array();
            for (let z in params.AutomationService) {
                let obj = new RunAutomationServiceEnabled();
                obj.deserialize(params.AutomationService[z]);
                this.AutomationService.push(obj);
            }
        }

        if (params.AutomationToolsService) {
            let obj = new RunAutomationServiceEnabled();
            obj.deserialize(params.AutomationToolsService)
            this.AutomationToolsService = obj;
        }

    }
}

/**
 * Status of TAT service.
 * @class
 */
class RunAutomationServiceEnabled extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether to enable [TencentCloud Automation Tools](https://intl.cloud.tencent.com/document/product/1340?from_cn_redirect=1). Valid values:<br><li>`TRUE`: Enable<br><li>`FALSE`: Not enable.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.Enabled = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Enabled = 'Enabled' in params ? params.Enabled : null;

    }
}

/**
 * DeleteLaunchConfiguration response structure.
 * @class
 */
class DeleteLaunchConfigurationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * This describes the IPv6 address public network accessibility of the instance created by a launch configuration and declares the public network usage billing method of the IPv6 address and the maximum bandwidth.
 * @class
 */
class IPv6InternetAccessible extends  AbstractModel {
    constructor(){
        super();

        /**
         * Network billing mode. Valid values: TRAFFIC_POSTPAID_BY_HOUR, BANDWIDTH_PACKAGE. Default value: TRAFFIC_POSTPAID_BY_HOUR. For the current account type, see [Account Type Description](https://intl.cloud.tencent.com/document/product/684/15246?from_cn_redirect=1#judge).
<br><li> IPv6 supports `TRAFFIC_POSTPAID_BY_HOUR` under a bill-by-IP account.
<br><li> IPv6 supports `BANDWIDTH_PACKAGE` under a bill-by-CVM account.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InternetChargeType = null;

        /**
         * Outbound bandwidth cap of the public network (in Mbps). <br>It defaults to `0`, which indicates no public network bandwidth is allocated to IPv6. The value range of bandwidth caps varies with the model, availability zone and billing mode. For more information, see [Public Network Bandwidth Cap](https://intl.cloud.tencent.com/document/product/213/12523?from_cn_redirect=1).
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.InternetMaxBandwidthOut = null;

        /**
         * Bandwidth package ID. You can obtain the ID from the `BandwidthPackageId` field in the response of the [DescribeBandwidthPackages](https://intl.cloud.tencent.com/document/api/215/19209?from_cn_redirect=1) API.
Note: This field may return `null`, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BandwidthPackageId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InternetChargeType = 'InternetChargeType' in params ? params.InternetChargeType : null;
        this.InternetMaxBandwidthOut = 'InternetMaxBandwidthOut' in params ? params.InternetMaxBandwidthOut : null;
        this.BandwidthPackageId = 'BandwidthPackageId' in params ? params.BandwidthPackageId : null;

    }
}

/**
 * DescribeScheduledActions request structure.
 * @class
 */
class DescribeScheduledActionsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Query by one or more scheduled task ids. you can obtain the scheduled task ID by logging in to the console (https://console.cloud.tencent.com/autoscaling/group). the maximum number of instances per request is 100. parameters ScheduledActionIds and Filters must not be specified simultaneously.
         * @type {Array.<string> || null}
         */
        this.ScheduledActionIds = null;

        /**
         * Filter criteria. obtain the scheduled task ID, scheduled task name, and scaling group ID by logging in to the console (https://console.cloud.tencent.com/autoscaling/group).
<li> scheduled-action-id - String - required: no - (filter) filter by scheduled task id.</li>.
<li> scheduled-action-name - String - required: no - (filter criteria) filters by scheduled task name.</li>.
<li> auto-scaling-group-id - String - required: no - (filter) filter by auto scaling group id.</li>.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Offset. Default value: 0. For more information on `Offset`, see the relevant section in the API [overview](https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returned results. Default value: 20. Maximum value: 100. For more information on `Limit`, see the relevant section in the API [overview](https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ScheduledActionIds = 'ScheduledActionIds' in params ? params.ScheduledActionIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * This describes the information on the Cloud Security service
 * @class
 */
class RunSecurityServiceEnabled extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether to enable [Cloud Workload Protection Platform (CWPP)](https://intl.cloud.tencent.com/document/product/296?from_cn_redirect=1). Valid values:
<li>TRUE: enable CWPP.</li>
<li>FALSE: disable CWPP.</li>
Default value: TRUE.
         * @type {boolean || null}
         */
        this.Enabled = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Enabled = 'Enabled' in params ? params.Enabled : null;

    }
}

/**
 * Refresh batch associated instances, including the refresh activity status of individual instances and related scaling activity information.
 * @class
 */
class RefreshBatchRelatedInstance extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Refresh instance status. if the instance is removed or terminated during refresh, the status will be updated to NOT_FOUND. valid values: <li>WAITING: pending refresh;</li> <li>INIT: initializing;</li> <li>RUNNING: refreshing;</li> <li>FAILED: refresh FAILED;</li> <li>CANCELLED: CANCELLED;</li> <li>SUCCESSFUL: refresh SUCCESSFUL;</li> <li>NOT_FOUND: instance does NOT exist.</li>.
         * @type {string || null}
         */
        this.InstanceStatus = null;

        /**
         * The most recent scaling activity ID during instance refresh can be queried via the DescribeAutoScalingActivities api.
Please note that scaling activities differ from instance refresh activities; a single instance refresh activity may involve multiple scaling activities.
         * @type {string || null}
         */
        this.LastActivityId = null;

        /**
         * Describes the instance refresh status.
         * @type {string || null}
         */
        this.InstanceStatusMessage = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceStatus = 'InstanceStatus' in params ? params.InstanceStatus : null;
        this.LastActivityId = 'LastActivityId' in params ? params.LastActivityId : null;
        this.InstanceStatusMessage = 'InstanceStatusMessage' in params ? params.InstanceStatusMessage : null;

    }
}

/**
 * DeleteScheduledAction request structure.
 * @class
 */
class DeleteScheduledActionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scheduled task ID to be deleted. obtain the scheduled task ID by calling the api [DescribeScheduledActions](https://intl.cloud.tencent.com/document/api/377/20450?from_cn_redirect=1) and retrieving the ScheduledActionId from the returned information.
         * @type {string || null}
         */
        this.ScheduledActionId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ScheduledActionId = 'ScheduledActionId' in params ? params.ScheduledActionId : null;

    }
}

/**
 * DescribeAutoScalingActivities request structure.
 * @class
 */
class DescribeAutoScalingActivitiesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Queries by one or more scaling activity IDs in the format of `asa-5l2ejpfo`. The maximum quantity per request is 100. This parameter does not support specifying both `ActivityIds` and `Filters` at the same time.
         * @type {Array.<string> || null}
         */
        this.ActivityIds = null;

        /**
         * Filter criteria. the filter field value ranges from...to.
<ul>
<li><strong>auto-scaling-group-id</strong><ul><li>Filter by [<strong>scaling group id</strong>]. you can log IN to the [console](https://console.cloud.tencent.com/autoscaling/group) or call the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) to obtain the scaling group id from the returned information.</li><li>type: String</li><li>required: no</li><li>example value: asg-kiju7yt5</li></ul></li>  <li><strong>activity-status-code</strong><ul><li>filter by [<strong>scaling activity status</strong>]</li><li>type: String</li><li>required: no</li><li>options: </li><ul><li>INIT: initializing</li><li>RUNNING: RUNNING</li><li>SUCCESSFUL: SUCCESSFUL activity</li><li>PARTIALLY_SUCCESSFUL: PARTIALLY SUCCESSFUL activity</li><li>FAILED: activity FAILED</li><li>CANCELLED: activity CANCELLED</li></ul></ul></li>  <li><strong>activity-type</strong><ul><li>filter by [<strong>scaling activity type</strong>]</li><li>type: String</li><li>required: no</li><li>options: </li><ul><li>SCALE_OUT: SCALE-OUT activity</li><li>SCALE_IN: SCALE-IN activity</li><li>ATTACH_INSTANCES: adding INSTANCES</li><li>REMOVE_INSTANCES: terminating INSTANCES</li><li>DETACH_INSTANCES: REMOVE INSTANCE</li><li>TERMINATE_INSTANCES_UNEXPECTEDLY: TERMINATE INSTANCE IN CVM console</li><li>REPLACE_UNHEALTHY_INSTANCE: REPLACE UNHEALTHY INSTANCES</li><li>START_INSTANCES: START INSTANCES</li><li>STOP_INSTANCES: shut down INSTANCE</li><li>INVOKE_COMMAND: execute COMMAND</li></ul></ul></li>  <li><strong>activity-id</strong><ul><li>filter by [<strong>scaling activity id</strong>]. you can log IN to the [console](https://console.cloud.tencent.com/autoscaling/group) to obtain the scaling activity id.</li><li>type: String</li><li>required: no</li><li>example value: asa-hy6tr4ed</li></ul></li></ul>.
The maximum number of `Filters` per request is 10. the upper limit for `Filter.Values` is 5. parameters must not specify both `ActivityIds` and `Filters` simultaneously.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Number of returned results. Default value: 20. Maximum value: 100. For more information on `Limit`, see the relevant section in the API [overview](https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Offset. Default value: 0. For more information on `Offset`, see the relevant section in the API [overview](https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * The earliest start time of the scaling activity, which will be ignored if ActivityIds is specified. The value is in `UTC time` in the format of `YYYY-MM-DDThh:mm:ssZ` according to the `ISO8601` standard.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * The latest end time of the scaling activity, which will be ignored if ActivityIds is specified. The value is in `UTC time` in the format of `YYYY-MM-DDThh:mm:ssZ` according to the `ISO8601` standard.
         * @type {string || null}
         */
        this.EndTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ActivityIds = 'ActivityIds' in params ? params.ActivityIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;

    }
}

/**
 * ModifyDesiredCapacity request structure.
 * @class
 */
class ModifyDesiredCapacityRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. obtain the scaling group ID by logging in to the console (https://console.cloud.tencent.com/autoscaling/group) or calling the api DescribeAutoScalingGroups (https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1), and retrieve AutoScalingGroupId from the returned information.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Expected number of instances, value ranges from 0 to 2000, to meet MaxSize >= DesiredCapacity >= MinSize.
         * @type {number || null}
         */
        this.DesiredCapacity = null;

        /**
         * Minimum number of instances. value range: [0,2000]. to meet MaxSize >= DesiredCapacity >= MinSize at the same time.
         * @type {number || null}
         */
        this.MinSize = null;

        /**
         * Maximum instance count. value range [0,2000]. to meet MaxSize >= DesiredCapacity >= MinSize.
         * @type {number || null}
         */
        this.MaxSize = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.DesiredCapacity = 'DesiredCapacity' in params ? params.DesiredCapacity : null;
        this.MinSize = 'MinSize' in params ? params.MinSize : null;
        this.MaxSize = 'MaxSize' in params ? params.MaxSize : null;

    }
}

/**
 * CreateScheduledAction response structure.
 * @class
 */
class CreateScheduledActionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scheduled task ID
         * @type {string || null}
         */
        this.ScheduledActionId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ScheduledActionId = 'ScheduledActionId' in params ? params.ScheduledActionId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * StartInstanceRefresh response structure.
 * @class
 */
class StartInstanceRefreshResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Refresh activity ID.
         * @type {string || null}
         */
        this.RefreshActivityId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RefreshActivityId = 'RefreshActivityId' in params ? params.RefreshActivityId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateLifecycleHook request structure.
 * @class
 */
class CreateLifecycleHookRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. obtain available scaling group ids in the following ways:.
<li>Query the scaling group ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group).</li>.
<li>Specifies the scaling group ID obtained by calling the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the return information.</li>.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Lifecycle hook name, which can contain Chinese characters, letters, numbers, underscores (_), hyphens (-), and periods (.) with a maximum length of 128 bytes.
         * @type {string || null}
         */
        this.LifecycleHookName = null;

        /**
         * Scenario for performing the lifecycle hook. valid values:.
<Li>`INSTANCE_LAUNCHING`: the lifecycle hook is being scaled out.</li>.
<Li>`INSTANCE_TERMINATING`: scaling in lifecycle hook</li>.
         * @type {string || null}
         */
        this.LifecycleTransition = null;

        /**
         * Action to be taken by the scaling group in case of lifecycle hook timeout or LifecycleCommand execution failure. valid values:.
<Li>CONTINUE: default value, means continue execution of capacity expansion or reduction</li>.
<li>ABANDON: for scale-out hooks, CVM instances with hook timeout or failed LifecycleCommand execution will be released directly or removed. for scale-in hooks, scale-in activities will continue.</li>.
         * @type {string || null}
         */
        this.DefaultResult = null;

        /**
         * The maximum length of time (in seconds) that can elapse before the lifecycle hook times out. Value range: 30-7200. Default value: 300
         * @type {number || null}
         */
        this.HeartbeatTimeout = null;

        /**
         * Additional information of a notification that auto scaling sends to targets. this parameter is set when you configure a notification (default value: ""), with a maximum length of 1024 characters. NotificationMetadata and LifecycleCommand are mutually exclusive, and either can be specified.
         * @type {string || null}
         */
        this.NotificationMetadata = null;

        /**
         * Notification target. `NotificationTarget` and `LifecycleCommand` cannot be specified at the same time.
         * @type {NotificationTarget || null}
         */
        this.NotificationTarget = null;

        /**
         * Specifies the scenario type for performing the lifecycle hook. valid values: NORMAL and EXTENSION. default value: NORMAL.
`EXTENSION`: the lifecycle hook will be triggered when calling [AttachInstances](https://intl.cloud.tencent.com/document/api/377/20441?from_cn_redirect=1), [DetachInstances](https://intl.cloud.tencent.com/document/api/377/20436?from_cn_redirect=1), [removeinstances](https://intl.cloud.tencent.com/document/api/377/20431?from_cn_redirect=1), [StopAutoScalingInstances](https://intl.cloud.tencent.com/document/api/377/40286?from_cn_redirect=1), [StartAutoScalingInstances](https://intl.cloud.tencent.com/document/api/377/40287?from_cn_redirect=1), or [StartInstanceRefresh](https://intl.cloud.tencent.com/document/api/377/99172?from_cn_redirect=1). `NORMAL`: the lifecycle hook is not triggered by these apis.
         * @type {string || null}
         */
        this.LifecycleTransitionType = null;

        /**
         * Specifies the remote command execution object. NotificationTarget and NotificationMetadata are mutually exclusive with this parameter. either cannot be specified simultaneously.
         * @type {LifecycleCommand || null}
         */
        this.LifecycleCommand = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.LifecycleHookName = 'LifecycleHookName' in params ? params.LifecycleHookName : null;
        this.LifecycleTransition = 'LifecycleTransition' in params ? params.LifecycleTransition : null;
        this.DefaultResult = 'DefaultResult' in params ? params.DefaultResult : null;
        this.HeartbeatTimeout = 'HeartbeatTimeout' in params ? params.HeartbeatTimeout : null;
        this.NotificationMetadata = 'NotificationMetadata' in params ? params.NotificationMetadata : null;

        if (params.NotificationTarget) {
            let obj = new NotificationTarget();
            obj.deserialize(params.NotificationTarget)
            this.NotificationTarget = obj;
        }
        this.LifecycleTransitionType = 'LifecycleTransitionType' in params ? params.LifecycleTransitionType : null;

        if (params.LifecycleCommand) {
            let obj = new LifecycleCommand();
            obj.deserialize(params.LifecycleCommand)
            this.LifecycleCommand = obj;
        }

    }
}

/**
 * This describes the information of a scheduled task.
 * @class
 */
class ScheduledAction extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scheduled task ID.
         * @type {string || null}
         */
        this.ScheduledActionId = null;

        /**
         * Scheduled task name.
         * @type {string || null}
         */
        this.ScheduledActionName = null;

        /**
         * ID of the auto scaling group where the scheduled task is located.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Start time of the scheduled task. The value is in `Beijing time` (UTC+8) in the format of `YYYY-MM-DDThh:mm:ss+08:00` according to the `ISO8601` standard.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * Specifies the repeating mode of the scheduled task. the Recurrence parameter limits (https://intl.cloud.tencent.com/document/product/377/88119?from_cn_redirect=1) consist of 5 fields separated by space, with the structure: minute, hour, date, month, week.
         * @type {string || null}
         */
        this.Recurrence = null;

        /**
         * End time of the scheduled task. The value is in `Beijing time` (UTC+8) in the format of `YYYY-MM-DDThh:mm:ss+08:00` according to the `ISO8601` standard.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Maximum number of instances set by the scheduled task.
         * @type {number || null}
         */
        this.MaxSize = null;

        /**
         * Desired number of instances set by the scheduled task.
         * @type {number || null}
         */
        this.DesiredCapacity = null;

        /**
         * Minimum number of instances set by the scheduled task.
         * @type {number || null}
         */
        this.MinSize = null;

        /**
         * The creation time of the scheduled task. value is in standard `UTC` time, formatted as `YYYY-MM-DDThh:MM:ssZ` according to the `ISO8601` standard.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * Scheduled task execution type. Valid values:
<li>CRONTAB: repeated execution.</li>
<li>ONCE: single execution.</li>
         * @type {string || null}
         */
        this.ScheduledType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ScheduledActionId = 'ScheduledActionId' in params ? params.ScheduledActionId : null;
        this.ScheduledActionName = 'ScheduledActionName' in params ? params.ScheduledActionName : null;
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.Recurrence = 'Recurrence' in params ? params.Recurrence : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.MaxSize = 'MaxSize' in params ? params.MaxSize : null;
        this.DesiredCapacity = 'DesiredCapacity' in params ? params.DesiredCapacity : null;
        this.MinSize = 'MinSize' in params ? params.MinSize : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;
        this.ScheduledType = 'ScheduledType' in params ? params.ScheduledType : null;

    }
}

/**
 * ModifyLifecycleHook request structure.
 * @class
 */
class ModifyLifecycleHookRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Lifecycle hook ID. you can get the lifecycle hook ID by calling the api [DescribeLifecycleHooks](https://intl.cloud.tencent.com/document/api/377/34452?from_cn_redirect=1) and retrieving the LifecycleHookId from the returned information.
         * @type {string || null}
         */
        this.LifecycleHookId = null;

        /**
         * Lifecycle hook name. Name only supports chinese, english, digits, underscore (_), hyphen (-), decimal point (.), maximum length cannot exceed 128.
         * @type {string || null}
         */
        this.LifecycleHookName = null;

        /**
         * Scenario for entering the lifecycle hook. valid values:.
`INSTANCE_LAUNCHING`: the lifecycle hook is being scaled out.
`INSTANCE_TERMINATING`: the lifecycle hook is being scaled in.
         * @type {string || null}
         */
        this.LifecycleTransition = null;

        /**
         * Action to be taken by the scaling group in case of lifecycle hook timeout or LifecycleCommand execution failure. valid values:.
Default value means CONTINUE to execute capacity expansion or reduction.
* ABANDON: for scale-out hooks, cvms that time out or fail to execute LifecycleCommand are released directly or removed. for scale-in hooks, scale-in activities continue.
         * @type {string || null}
         */
        this.DefaultResult = null;

        /**
         * The maximum length of time (in seconds) that can elapse before the lifecycle hook times out. Value range: 30 - 7,200 seconds.
         * @type {number || null}
         */
        this.HeartbeatTimeout = null;

        /**
         * Specifies the additional information sent by auto scaling to the notification target. NotificationMetadata and LifecycleCommand are mutually exclusive. the two cannot be specified simultaneously.
         * @type {string || null}
         */
        this.NotificationMetadata = null;

        /**
         * The scenario where the lifecycle hook is applied. `EXTENSION`: The lifecycle hook will be triggered when `AttachInstances`, `DetachInstances` or `RemoveInstances` is called. `NORMAL`: The lifecycle hook is not triggered by the above APIs.
         * @type {string || null}
         */
        this.LifecycleTransitionType = null;

        /**
         * Notify the target information. NotificationTarget and LifecycleCommand are mutually exclusive. the two cannot be specified simultaneously.
         * @type {NotificationTarget || null}
         */
        this.NotificationTarget = null;

        /**
         * Remote command execution object. `NotificationMetadata`, `NotificationTarget`, and `LifecycleCommand` cannot be specified at the same time.
         * @type {LifecycleCommand || null}
         */
        this.LifecycleCommand = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LifecycleHookId = 'LifecycleHookId' in params ? params.LifecycleHookId : null;
        this.LifecycleHookName = 'LifecycleHookName' in params ? params.LifecycleHookName : null;
        this.LifecycleTransition = 'LifecycleTransition' in params ? params.LifecycleTransition : null;
        this.DefaultResult = 'DefaultResult' in params ? params.DefaultResult : null;
        this.HeartbeatTimeout = 'HeartbeatTimeout' in params ? params.HeartbeatTimeout : null;
        this.NotificationMetadata = 'NotificationMetadata' in params ? params.NotificationMetadata : null;
        this.LifecycleTransitionType = 'LifecycleTransitionType' in params ? params.LifecycleTransitionType : null;

        if (params.NotificationTarget) {
            let obj = new NotificationTarget();
            obj.deserialize(params.NotificationTarget)
            this.NotificationTarget = obj;
        }

        if (params.LifecycleCommand) {
            let obj = new LifecycleCommand();
            obj.deserialize(params.LifecycleCommand)
            this.LifecycleCommand = obj;
        }

    }
}

/**
 * CompleteLifecycleAction response structure.
 * @class
 */
class CompleteLifecycleActionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ScaleOutInstances response structure.
 * @class
 */
class ScaleOutInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling activity ID
         * @type {string || null}
         */
        this.ActivityId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ActivityId = 'ActivityId' in params ? params.ActivityId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Instance refresh settings.
 * @class
 */
class RefreshSettings extends  AbstractModel {
    constructor(){
        super();

        /**
         * Rolling update settings parameters. RefreshMode is rolling update. this parameter must be filled in.
         * @type {RollingUpdateSettings || null}
         */
        this.RollingUpdateSettings = null;

        /**
         * Whether to enable the backend service health check for the instance. Default value: FALSE. This parameter is valid only for the scaling group bound to an application-based CLB. After this feature is enabled, if the instance fails the check after refresh, the port weight of the CLB will be always 0, and it will be marked as a refresh failure. Valid values: <li>TRUE: enable;</li> <li>FALSE: disable.</li>
         * @type {boolean || null}
         */
        this.CheckInstanceTargetHealth = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.RollingUpdateSettings) {
            let obj = new RollingUpdateSettings();
            obj.deserialize(params.RollingUpdateSettings)
            this.RollingUpdateSettings = obj;
        }
        this.CheckInstanceTargetHealth = 'CheckInstanceTargetHealth' in params ? params.CheckInstanceTargetHealth : null;

    }
}

/**
 * > Describes key-value pair filters used for conditional queries, such as filtering results by ID, name and state.
> * If there are multiple `Filter` parameters, the relationship among them will be logical `AND`.
> * If there are multiple `Values` for the same `Filter`, the relationship among the `Values` for the same `Filter` will be logical `OR`.
 * @class
 */
class Filter extends  AbstractModel {
    constructor(){
        super();

        /**
         * Field to be filtered.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Filter value of the field.
         * @type {Array.<string> || null}
         */
        this.Values = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Values = 'Values' in params ? params.Values : null;

    }
}

/**
 * DescribeLifecycleHooks request structure.
 * @class
 */
class DescribeLifecycleHooksRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Queries by one or more lifecycle hook IDs in the format of `ash-8azjzxcl`. The maximum quantity per request is 100. This parameter does not support specifying both `LifecycleHookIds` and `Filters` at the same time.
         * @type {Array.<string> || null}
         */
        this.LifecycleHookIds = null;

        /**
         * Filters.
<li> `lifecycle-hook-id` - String - Required: No - (Filter) Filter by lifecycle hook ID.</li>
<li> `lifecycle-hook-name` - String - Required: No - (Filter) Filter by lifecycle hook name.</li>
<li> `auto-scaling-group-id` - String - Required: No - (Filter) Filter by scaling group ID.</li>
Up to 10 filters can be included in a request and up to 5 values for each filter. It cannot be specified with `LifecycleHookIds` at the same time.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Number of returned results. Default value: 20. Maximum value: 100. For more information on `Limit`, see the relevant section in the API [overview](https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Offset. Default value: 0. For more information on `Offset`, see the relevant section in the API [overview](https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LifecycleHookIds = 'LifecycleHookIds' in params ? params.LifecycleHookIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * Service settings
 * @class
 */
class ServiceSettings extends  AbstractModel {
    constructor(){
        super();

        /**
         * Enables unhealthy instance replacement. If this feature is enabled, AS will replace instances that are flagged as unhealthy by Cloud Monitor. If this parameter is not specified, the value will be False by default.
         * @type {boolean || null}
         */
        this.ReplaceMonitorUnhealthy = null;

        /**
         * Valid values: 
CLASSIC_SCALING: this is the typical scaling method, which creates and terminates instances to perform scaling operations. 
WAKE_UP_STOPPED_SCALING: this scaling method first tries to start stopped instances. If the number of instances woken up is insufficient, the system creates new instances for scale-out. For scale-in, instances are terminated as in the typical method. You can use the StopAutoScalingInstances API to stop instances in the scaling group. Scale-out operations triggered by alarms will still create new instances.
Default value: CLASSIC_SCALING
         * @type {string || null}
         */
        this.ScalingMode = null;

        /**
         * Enable unhealthy instance replacement. If this feature is enabled, AS will replace instances that are found unhealthy in the CLB health check. If this parameter is not specified, the default value `False` will be used.
         * @type {boolean || null}
         */
        this.ReplaceLoadBalancerUnhealthy = null;

        /**
         * Replacement mode of the unhealthy replacement service. valid values:.
RECREATE: rebuild an instance to replace the unhealthy instance.
RESET: performs a system reinstallation on unhealthy instances while keeping the data disk, private IP address, instance id, and other information unchanged. the instance login settings, hostname, enhanced services, and UserData remain consistent with the current launch configuration.
Default value: RECREATE.
         * @type {string || null}
         */
        this.ReplaceMode = null;

        /**
         * Automatic instance Tag update. the default value is False. if this feature is enabled, tags of running instances in a scaling group will be updated as well if the scaling group tags are updated. (this feature takes effect for Tag creation and editing but not Tag deletion.) the update does not take effect immediately due to certain latency.
         * @type {boolean || null}
         */
        this.AutoUpdateInstanceTags = null;

        /**
         * Expected number of instances sync minimum and maximum value. default value is False. this parameter only takes effect in scenarios where the expected number is not passed in to modify scaling group api.
<Li>True: when modifying the maximum or minimum value, if a conflict exists with the current expected value, synchronously adjust the expected value. for example, if the input minimum value is 2 while the current expected value is 1, the expected value will be synchronously adjusted to 2.</li>.
<Li>False: if a conflict exists between the current expected value when modifying the maximum or minimum value, an error message indicates it is not allowed to be modified.</li>.
         * @type {boolean || null}
         */
        this.DesiredCapacitySyncWithMaxMinSize = null;

        /**
         * Scaling in unhealthy instances first. If enabled, preferentially selects unhealthy instances during scale in. Default value: False.
         * @type {boolean || null}
         */
        this.PriorityScaleInUnhealthy = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ReplaceMonitorUnhealthy = 'ReplaceMonitorUnhealthy' in params ? params.ReplaceMonitorUnhealthy : null;
        this.ScalingMode = 'ScalingMode' in params ? params.ScalingMode : null;
        this.ReplaceLoadBalancerUnhealthy = 'ReplaceLoadBalancerUnhealthy' in params ? params.ReplaceLoadBalancerUnhealthy : null;
        this.ReplaceMode = 'ReplaceMode' in params ? params.ReplaceMode : null;
        this.AutoUpdateInstanceTags = 'AutoUpdateInstanceTags' in params ? params.AutoUpdateInstanceTags : null;
        this.DesiredCapacitySyncWithMaxMinSize = 'DesiredCapacitySyncWithMaxMinSize' in params ? params.DesiredCapacitySyncWithMaxMinSize : null;
        this.PriorityScaleInUnhealthy = 'PriorityScaleInUnhealthy' in params ? params.PriorityScaleInUnhealthy : null;

    }
}

/**
 * CreateAutoScalingGroup response structure.
 * @class
 */
class CreateAutoScalingGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Auto scaling group ID
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Load balancer target attribute
 * @class
 */
class TargetAttribute extends  AbstractModel {
    constructor(){
        super();

        /**
         * Port. value range: [1,65535]. as an input parameter, this parameter is required.
         * @type {number || null}
         */
        this.Port = null;

        /**
         * Weight. value range: [0,100]. this parameter is required as an input parameter.
         * @type {number || null}
         */
        this.Weight = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Port = 'Port' in params ? params.Port : null;
        this.Weight = 'Weight' in params ? params.Weight : null;

    }
}

/**
 * ModifyNotificationConfiguration response structure.
 * @class
 */
class ModifyNotificationConfigurationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * This describes the configuration and information related to instance login. For security reasons, sensitive information is not described.
 * @class
 */
class LimitedLoginSettings extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of key IDs.
         * @type {Array.<string> || null}
         */
        this.KeyIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.KeyIds = 'KeyIds' in params ? params.KeyIds : null;

    }
}

/**
 * DescribeLifecycleHooks response structure.
 * @class
 */
class DescribeLifecycleHooksResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of lifecycle hooks
         * @type {Array.<LifecycleHook> || null}
         */
        this.LifecycleHookSet = null;

        /**
         * Total quantity
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.LifecycleHookSet) {
            this.LifecycleHookSet = new Array();
            for (let z in params.LifecycleHookSet) {
                let obj = new LifecycleHook();
                obj.deserialize(params.LifecycleHookSet[z]);
                this.LifecycleHookSet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateScalingPolicy request structure.
 * @class
 */
class CreateScalingPolicyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. obtain the scaling group ID by logging in to the console (https://console.cloud.tencent.com/autoscaling/group) or calling the api DescribeAutoScalingGroups (https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1), and retrieve AutoScalingGroupId from the returned information.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * The Alarm policy name must be unique in your account. the name length cannot exceed 60 characters. the name only supports chinese, english, digits, underscores, hyphens, and decimal points.
         * @type {string || null}
         */
        this.ScalingPolicyName = null;

        /**
         * Alarm trigger policy type. default: SIMPLE. valid values:.
<Li>`SIMPLE`: a simple policy.</li>.
<Li>`TARGET_TRACKING`: a target tracking policy.</li>.
         * @type {string || null}
         */
        this.ScalingPolicyType = null;

        /**
         * After an Alarm is triggered, specifies the method for modifying the expected number of instances. required in the scenario of simple policies. valid values:.
<Li>CHANGE_IN_CAPACITY: increase or decrease the expected number of instances</li>.
<Li>EXACT_CAPACITY: adjust to the expected number of instances</li>.
<Li>PERCENT_CHANGE_IN_CAPACITY: adjust expected instance number by percent</li>.
         * @type {string || null}
         */
        this.AdjustmentType = null;

        /**
         * Adjustment value for the expected number of instances after an Alarm is triggered, which is applicable only to simple policies and required in simple policy scenarios.
<li>When AdjustmentType is CHANGE_IN_CAPACITY, a positive AdjustmentValue indicates an increase IN instances after Alarm trigger, while a negative value indicates a decrease IN instances after Alarm trigger.</li>. 
<li>When AdjustmentType is set to EXACT_CAPACITY, the value of AdjustmentValue indicates the new desired number of instances after the Alarm is triggered. it must be at least 0.</li>. 
<li>When AdjustmentType is set to PERCENT_CHANGE_IN_CAPACITY, a positive value of AdjustmentValue indicates an increase in the number of instances by a percentage after the alarm is triggered, while a negative value indicates a decrease in the number of instances by a percentage after the alarm is triggered. Unit: %.</li>
         * @type {number || null}
         */
        this.AdjustmentValue = null;

        /**
         * Cooldown period (in seconds). This parameter is only applicable to a simple policy. Default value: 300.
         * @type {number || null}
         */
        this.Cooldown = null;

        /**
         * Alarm monitoring metric, apply only to simple policies, required in the scenario of simple policy.
         * @type {MetricAlarm || null}
         */
        this.MetricAlarm = null;

        /**
         * Predefined monitoring item, applicable only to target tracking policies. required in the scenario. value range:.
<Li>ASG_AVG_CPU_UTILIZATION: average cpu utilization</li>.
<Li>ASG_AVG_LAN_TRAFFIC_OUT: specifies the average outbound private network bandwidth.</li>.
<Li>ASG_AVG_LAN_TRAFFIC_IN: average inbound private network bandwidth</li>.
<Li>ASG_AVG_WAN_TRAFFIC_OUT: specifies the average outbound public network bandwidth.</li>.
<li>ASG_AVG_WAN_TRAFFIC_IN: average inbound public network bandwidth</li>
         * @type {string || null}
         */
        this.PredefinedMetricType = null;

        /**
         * Target value, applicable only to the target tracking policy, required in the scenario.
<Li>ASG_AVG_CPU_UTILIZATION: value range: [1, 100); unit: %.</li>.
<li>ASG_AVG_LAN_TRAFFIC_OUT: value range: > 0; unit: Mbps.</li>.
<li>ASG_AVG_LAN_TRAFFIC_IN: value range: > 0; unit: Mbps.</li>.
<li>ASG_AVG_WAN_TRAFFIC_OUT: value range: > 0; unit: Mbps.</li>.
<li>ASG_AVG_WAN_TRAFFIC_IN: value range: > 0; unit: Mbps.</li>
         * @type {number || null}
         */
        this.TargetValue = null;

        /**
         * Instance warm-up period (in seconds). It is only available when `ScalingPolicyType` is `TARGET_TRACKING`. Value range: 0-3600. Default value: 300.
         * @type {number || null}
         */
        this.EstimatedInstanceWarmup = null;

        /**
         * Whether to disable scale-in, which is applicable only to target tracking policies. Default value: false. Valid values:
<li>true: Target tracking policies trigger only scale-out.</li>
<li>false: Target tracking policies trigger both scale-out and scale-in.</li>
         * @type {boolean || null}
         */
        this.DisableScaleIn = null;

        /**
         * This parameter is diused. Please use [CreateNotificationConfiguration](https://intl.cloud.tencent.com/document/api/377/33185?from_cn_redirect=1) instead.
Notification group ID, which is the set of user group IDs.
         * @type {Array.<string> || null}
         */
        this.NotificationUserGroupIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.ScalingPolicyName = 'ScalingPolicyName' in params ? params.ScalingPolicyName : null;
        this.ScalingPolicyType = 'ScalingPolicyType' in params ? params.ScalingPolicyType : null;
        this.AdjustmentType = 'AdjustmentType' in params ? params.AdjustmentType : null;
        this.AdjustmentValue = 'AdjustmentValue' in params ? params.AdjustmentValue : null;
        this.Cooldown = 'Cooldown' in params ? params.Cooldown : null;

        if (params.MetricAlarm) {
            let obj = new MetricAlarm();
            obj.deserialize(params.MetricAlarm)
            this.MetricAlarm = obj;
        }
        this.PredefinedMetricType = 'PredefinedMetricType' in params ? params.PredefinedMetricType : null;
        this.TargetValue = 'TargetValue' in params ? params.TargetValue : null;
        this.EstimatedInstanceWarmup = 'EstimatedInstanceWarmup' in params ? params.EstimatedInstanceWarmup : null;
        this.DisableScaleIn = 'DisableScaleIn' in params ? params.DisableScaleIn : null;
        this.NotificationUserGroupIds = 'NotificationUserGroupIds' in params ? params.NotificationUserGroupIds : null;

    }
}

/**
 * ResumeInstanceRefresh request structure.
 * @class
 */
class ResumeInstanceRefreshRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. obtain in the following ways:.
<li>Query the scaling group ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group).</li>.
<li>Specifies the scaling group ID obtained by calling the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the return information.</li>.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Refresh activity ID. you can get the instance refresh activity ID by calling the api [DescribeRefreshActivities](https://intl.cloud.tencent.com/document/api/377/99175?from_cn_redirect=1) and retrieving the RefreshActivityId from the returned information.
         * @type {string || null}
         */
        this.RefreshActivityId = null;

        /**
         * Recovery mode of instances that have failed to be refreshed in the current batch. If there are no failed instances, this parameter is invalid. Default value: RETRY. Valid values: <li>RETRY: Retry instances that have failed to be refreshed in the current batch.</li> <li>CONTINUE: Skip instances that have failed to be refreshed in the current batch.</li>
         * @type {string || null}
         */
        this.ResumeMode = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.RefreshActivityId = 'RefreshActivityId' in params ? params.RefreshActivityId : null;
        this.ResumeMode = 'ResumeMode' in params ? params.ResumeMode : null;

    }
}

/**
 * DescribeAutoScalingAdvices request structure.
 * @class
 */
class DescribeAutoScalingAdvicesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The scaling group list to be queried, with an upper limit of 100. obtain the scaling group ID by logging in to the console (https://console.cloud.tencent.com/autoscaling/group) or calling the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the returned information.
         * @type {Array.<string> || null}
         */
        this.AutoScalingGroupIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupIds = 'AutoScalingGroupIds' in params ? params.AutoScalingGroupIds : null;

    }
}

/**
 * DeleteNotificationConfiguration request structure.
 * @class
 */
class DeleteNotificationConfigurationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The notification ID to be deleted. this is currently a required parameter. you can obtain the notification ID by logging in to the console (https://console.cloud.tencent.com/autoscaling/group) or calling the api [DescribeNotificationConfigurations](https://intl.cloud.tencent.com/document/api/377/33183?from_cn_redirect=1) and retrieving the AutoScalingNotificationId from the returned information.
         * @type {string || null}
         */
        this.AutoScalingNotificationId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingNotificationId = 'AutoScalingNotificationId' in params ? params.AutoScalingNotificationId : null;

    }
}

/**
 * DescribeLaunchConfigurations request structure.
 * @class
 */
class DescribeLaunchConfigurationsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Queries by one or more launch configuration IDs in the format of `asc-ouy1ax38`. The maximum quantity per request is 100. This parameter does not support specifying both `LaunchConfigurationIds` and `Filters` at the same time.
         * @type {Array.<string> || null}
         */
        this.LaunchConfigurationIds = null;

        /**
         * Filter criteria

<li>launch-configuration-id - String - required: no - (filter condition) filter by launch configuration ID.</li>
<li>launch-configuration-name - String - required: no - (filter condition) filter by launch configuration name.</li>
<li>vague-launch-configuration-name - String - required: no - (filter condition) fuzzy search by launch configuration name.</li>
<li>tag-key - String - required: no - (filter condition) filter by tag key.</li>
<li>tag-value - String - required: no - (filter condition) filter by tag value.</li>
<li>tag:tag-key - String - required: no - (filter condition) filter by Tag key-value pair. Replace tag-key with a specific tag key. See Example 3 for usage.</li>
The maximum number of `Filters` per request is 10, and the maximum number of `Filter.Values` is 5. The parameter does not support specifying both `LaunchConfigurationIds` and `Filters`.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * The number of returned results. Default value: `20`. Maximum value: `100`. For more information on `Limit`, see the relevant sections in API [Introduction](https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * The offset. Default value: `0`. For more information on `Offset`, see the relevant sections in API [Introduction](https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LaunchConfigurationIds = 'LaunchConfigurationIds' in params ? params.LaunchConfigurationIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * Notification target
 * @class
 */
class NotificationTarget extends  AbstractModel {
    constructor(){
        super();

        /**
         * Target type. valid values include `CMQ_QUEUE`, `CMQ_TOPIC`, `TDMQ_CMQ_QUEUE`, `TDMQ_CMQ_TOPIC`.
<li>CMQ_QUEUE, specifies tencent cloud message QUEUE - queueing model. the corresponding product is offline. it is recommended to switch to TDMQ_CMQ_QUEUE (https://intl.cloud.tencent.com/document/product/1496/83970?from_cn_redirect=1).</li>.
<li>CMQ_TOPIC, specifies tencent cloud message queue - TOPIC model. the corresponding product is offline. it is recommended to switch to TDMQ_CMQ_TOPIC (https://intl.cloud.tencent.com/document/product/1496/83970?from_cn_redirect=1).</li>.
<li> TDMQ_CMQ_QUEUE. specifies the tencent cloud TDMQ message QUEUE - queueing model.</li>.
<Li>TDMQ_CMQ_TOPIC. specifies tencent cloud tdmq message queue - topic model.</li>.
         * @type {string || null}
         */
        this.TargetType = null;

        /**
         * Queue name. This parameter is required when `TargetType` is `CMQ_QUEUE` or `TDMQ_CMQ_QUEUE`.
         * @type {string || null}
         */
        this.QueueName = null;

        /**
         * Topic name. This parameter is required when `TargetType` is `CMQ_TOPIC` or `TDMQ_CMQ_TOPIC`.
         * @type {string || null}
         */
        this.TopicName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TargetType = 'TargetType' in params ? params.TargetType : null;
        this.QueueName = 'QueueName' in params ? params.QueueName : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;

    }
}

/**
 * ModifyLoadBalancerTargetAttributes request structure.
 * @class
 */
class ModifyLoadBalancerTargetAttributesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. obtain the scaling group ID by logging in to the console (https://console.cloud.tencent.com/autoscaling/group) or calling the api DescribeAutoScalingGroups (https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1), and retrieve AutoScalingGroupId from the returned information.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Specifies the list of load balancers whose target rule attributes need modification, with a list length limit of 100. can be obtained through the [DescribeLoadBalancers](https://intl.cloud.tencent.com/document/product/214/30685?from_cn_redirect=1) api.
         * @type {Array.<ForwardLoadBalancer> || null}
         */
        this.ForwardLoadBalancers = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;

        if (params.ForwardLoadBalancers) {
            this.ForwardLoadBalancers = new Array();
            for (let z in params.ForwardLoadBalancers) {
                let obj = new ForwardLoadBalancer();
                obj.deserialize(params.ForwardLoadBalancers[z]);
                this.ForwardLoadBalancers.push(obj);
            }
        }

    }
}

/**
 * RollbackInstanceRefresh request structure.
 * @class
 */
class RollbackInstanceRefreshRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. you can obtain available scaling group ids in the following ways. 
<li>Query the scaling group ID by logging in to the <a href="https://console.cloud.tencent.com/autoscaling/group">console</a>.</li>.
<li>Obtain the scaling group ID by calling the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the returned information.</li>.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Refresh settings.
         * @type {RefreshSettings || null}
         */
        this.RefreshSettings = null;

        /**
         * The original refresh activity ID. you can obtain the original refresh activity ID by calling the api [DescribeRefreshActivities](https://intl.cloud.tencent.com/document/api/377/99175?from_cn_redirect=1) and retrieving the OriginRefreshActivityId from the returned information.
         * @type {string || null}
         */
        this.OriginRefreshActivityId = null;

        /**
         * Refresh mode, currently, only rolling updates are supported, with the default value being ROLLING_UPDATE_RESET.
         * @type {string || null}
         */
        this.RefreshMode = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;

        if (params.RefreshSettings) {
            let obj = new RefreshSettings();
            obj.deserialize(params.RefreshSettings)
            this.RefreshSettings = obj;
        }
        this.OriginRefreshActivityId = 'OriginRefreshActivityId' in params ? params.OriginRefreshActivityId : null;
        this.RefreshMode = 'RefreshMode' in params ? params.RefreshMode : null;

    }
}

/**
 * StartInstanceRefresh request structure.
 * @class
 */
class StartInstanceRefreshRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Refresh settings.
         * @type {RefreshSettings || null}
         */
        this.RefreshSettings = null;

        /**
         * Refresh mode. default value: ROLLING_UPDATE_RESET. valid values:.
<Li>ROLLING_UPDATE_RESET: reinstall the system for rolling updates.</li>.
<li>ROLLING_UPDATE_REPLACE: Create an instance and replace the old instance with it for rolling updates. This mode does not support the rollback API currently.</li>
         * @type {string || null}
         */
        this.RefreshMode = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;

        if (params.RefreshSettings) {
            let obj = new RefreshSettings();
            obj.deserialize(params.RefreshSettings)
            this.RefreshSettings = obj;
        }
        this.RefreshMode = 'RefreshMode' in params ? params.RefreshMode : null;

    }
}

/**
 * DeleteAutoScalingGroup response structure.
 * @class
 */
class DeleteAutoScalingGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Result information of the lifecycle hook action
 * @class
 */
class LifecycleActionResultInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of the lifecycle hook
         * @type {string || null}
         */
        this.LifecycleHookId = null;

        /**
         * ID of the instance
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Execution task ID. You can query the result by using the [DescribeInvocations](https://intl.cloud.tencent.com/document/api/1340/52679?from_cn_redirect=1) API of TAT. 
         * @type {string || null}
         */
        this.InvocationId = null;

        /**
         * Result of command invocation,
<li>`SUCCESSFUL`: Successful command invocation. It does mean that the task is successfully. You can query the task result with the `InvocationId.</li>
<li>`FAILED`: Failed to invoke the command</li>
<li>`NONE`</li>
         * @type {string || null}
         */
        this.InvokeCommandResult = null;

        /**
         * Notification result, which indicates whether it is successful to notify CMQ/TDMQ.<br>
<li>SUCCESSFUL: It is successful to notify CMQ/TDMQ.</li>
<li>FAILED: It is failed to notify CMQ/TDMQ.</li>
<li>NONE</li>
         * @type {string || null}
         */
        this.NotificationResult = null;

        /**
         * Result of the lifecyle hook action. Values: CONTINUE, ABANDON
         * @type {string || null}
         */
        this.LifecycleActionResult = null;

        /**
         * Reason of the result <br>
<li>`HEARTBEAT_TIMEOUT`: Heartbeat timed out. The setting of `DefaultResult` is used.</li>
<li>`NOTIFICATION_FAILURE`: Failed to send the notification. The setting of `DefaultResult` is used.</li>
<li>`CALL_INTERFACE`: Calls the `CompleteLifecycleAction` to set the result</li>
<li>ANOTHER_ACTION_ABANDON: It has been set to `ABANDON` by another operation.</li>
<li>COMMAND_CALL_FAILURE: Failed to call the command. The DefaultResult is applied.</li>
<li>COMMAND_EXEC_FINISH: Command completed</li>
<li>COMMAND_CALL_FAILURE: Failed to execute the command. The DefaultResult is applied.</li>
<li>COMMAND_EXEC_RESULT_CHECK_FAILURE: Failed to check the command result. The DefaultResult is applied.</li>
         * @type {string || null}
         */
        this.ResultReason = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LifecycleHookId = 'LifecycleHookId' in params ? params.LifecycleHookId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InvocationId = 'InvocationId' in params ? params.InvocationId : null;
        this.InvokeCommandResult = 'InvokeCommandResult' in params ? params.InvokeCommandResult : null;
        this.NotificationResult = 'NotificationResult' in params ? params.NotificationResult : null;
        this.LifecycleActionResult = 'LifecycleActionResult' in params ? params.LifecycleActionResult : null;
        this.ResultReason = 'ResultReason' in params ? params.ResultReason : null;

    }
}

/**
 * Brief information of a scaling group.
 * @class
 */
class AutoScalingGroupAbstract extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Auto scaling group name.
         * @type {string || null}
         */
        this.AutoScalingGroupName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.AutoScalingGroupName = 'AutoScalingGroupName' in params ? params.AutoScalingGroupName : null;

    }
}

/**
 * EnableAutoScalingGroup request structure.
 * @class
 */
class EnableAutoScalingGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. you can obtain the scaling group ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group) or making an api call to [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the returned information.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;

    }
}

/**
 * StopInstanceRefresh request structure.
 * @class
 */
class StopInstanceRefreshRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. you can obtain available scaling group ids in the following ways.
<li>Query the scaling group ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group).</li>.
<li>Get the scaling group ID by calling the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the returned information.</li>.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Refresh activity ID. you can call the api [DescribeRefreshActivities](https://intl.cloud.tencent.com/document/api/377/99175?from_cn_redirect=1) and obtain the instance refresh activity ID from the returned information.
         * @type {string || null}
         */
        this.RefreshActivityId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.RefreshActivityId = 'RefreshActivityId' in params ? params.RefreshActivityId : null;

    }
}

/**
 * Alarming metric of AS
 * @class
 */
class MetricAlarm extends  AbstractModel {
    constructor(){
        super();

        /**
         * Comparison operator. Value range: <br><li>GREATER_THAN: greater than </li><li>GREATER_THAN_OR_EQUAL_TO: greater than or equal to </li><li>LESS_THAN: less than </li><li> LESS_THAN_OR_EQUAL_TO: less than or equal to </li><li> EQUAL_TO: equal to </li> <li>NOT_EQUAL_TO: not equal to </li>
         * @type {string || null}
         */
        this.ComparisonOperator = null;

        /**
         * Metric names, with the following optional fields: <br><li>CPU_UTILIZATION: CPU utilization.</li> <li>MEM_UTILIZATION: Memory utilization.</li> <li>LAN_TRAFFIC_OUT: Private network outbound bandwidth.</li> <li>LAN_TRAFFIC_IN: Private network inbound bandwidth.</li> <li>WAN_TRAFFIC_OUT: Public network outbound bandwidth.</li> <li>WAN_TRAFFIC_IN: Public network inbound bandwidth.</li> <li>TCP_CURR_ESTAB: TCP connections.</li>
         * @type {string || null}
         */
        this.MetricName = null;

        /**
         * Alarm threshold values: <br><li>CPU_UTILIZATION: [1, 100], Unit: %.</li> <li>MEM_UTILIZATION: [1, 100], Unit: %.</li> <li>LAN_TRAFFIC_OUT: >0, Unit: Mbps.</li> <li>LAN_TRAFFIC_IN: >0, Unit: Mbps.</li> <li>WAN_TRAFFIC_OUT: >0, Unit: Mbps.</li> <li>WAN_TRAFFIC_IN: >0, Unit: Mbps.</li> <li>TCP_CURR_ESTAB: >0, Unit: Count.</li>
         * @type {number || null}
         */
        this.Threshold = null;

        /**
         * Time period in seconds. Enumerated values: 60, 300.
         * @type {number || null}
         */
        this.Period = null;

        /**
         * Number of repetitions. Value range: [1, 10]
         * @type {number || null}
         */
        this.ContinuousTime = null;

        /**
         * Statistics type. Value range: <br><li>AVERAGE: average </li><li>MAXIMUM: maximum <li>MINIMUM: minimum </li><br> Default value: AVERAGE
         * @type {string || null}
         */
        this.Statistic = null;

        /**
         * Precise alarm threshold values. This parameter is not used as an input argument but is used solely as an output parameter for the query API: <br><li>CPU_UTILIZATION: (0, 100], Unit: %.</li> <li>MEM_UTILIZATION: (0, 100], Unit: %.</li> <li>LAN_TRAFFIC_OUT: >0, Unit: Mbps.</li> <li>LAN_TRAFFIC_IN: >0, Unit: Mbps.</li> <li>WAN_TRAFFIC_OUT: >0, Unit: Mbps.</li> <li>WAN_TRAFFIC_IN: >0, Unit: Mbps.</li> <li>TCP_CURR_ESTAB: >0, Unit: Count.</li>
         * @type {number || null}
         */
        this.PreciseThreshold = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ComparisonOperator = 'ComparisonOperator' in params ? params.ComparisonOperator : null;
        this.MetricName = 'MetricName' in params ? params.MetricName : null;
        this.Threshold = 'Threshold' in params ? params.Threshold : null;
        this.Period = 'Period' in params ? params.Period : null;
        this.ContinuousTime = 'ContinuousTime' in params ? params.ContinuousTime : null;
        this.Statistic = 'Statistic' in params ? params.Statistic : null;
        this.PreciseThreshold = 'PreciseThreshold' in params ? params.PreciseThreshold : null;

    }
}

/**
 * Instance refresh activity.
 * @class
 */
class RefreshActivity extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Refresh activity ID.
         * @type {string || null}
         */
        this.RefreshActivityId = null;

        /**
         * Original refresh activity ID. exists only in rollback refresh activity.
         * @type {string || null}
         */
        this.OriginRefreshActivityId = null;

        /**
         * Refresh batch information list.
         * @type {Array.<RefreshBatch> || null}
         */
        this.RefreshBatchSet = null;

        /**
         * Refresh mode. valid values as follows:.
<Li>ROLLING_UPDATE_RESET: reinstall the system for rolling updates.</li>.
<li>ROLLING_UPDATE_REPLACE: Create an instance and replace the old instance with it for rolling updates. This mode does not support the rollback API currently.</li>
         * @type {string || null}
         */
        this.RefreshMode = null;

        /**
         * Instance update setting parameters.
         * @type {RefreshSettings || null}
         */
        this.RefreshSettings = null;

        /**
         * Refresh activity type. Valid values:
<li>NORMAL: normal refresh activity.</li>
<li>ROLLBACK: rollback refresh activity.</li>
         * @type {string || null}
         */
        this.ActivityType = null;

        /**
         * Refresh activity status. Valid values:
<li>INIT: initializing.</li>
<li>RUNNING: running.</li>
<li>SUCCESSFUL: successful.</li>
<li>FAILED_PAUSE: paused due to the failure of a refresh batch.</li>
<li>AUTO_PAUSE: automatically paused due to the pause policy.</li>
<li>MANUAL_PAUSE: manually paused.</li>
<li>CANCELLED: canceled.</li>
<li>FAILED: failed.</li>
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Current refresh batch number. for example, 2 indicates the second batch of instances is being refreshed by the current activity.
         * @type {number || null}
         */
        this.CurrentRefreshBatchNum = null;

        /**
         * The activity start time is refreshed in standard `UTC` time, in the format `YYYY-MM-DDTHH:MM:ssZ`.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * Refresh activity end time, in standard UTC time, in the format YYYY-MM-DDTHH:MM:ssZ.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Refresh activity creation time, in standard UTC time, in the format YYYY-MM-DDTHH:MM:ssZ.
         * @type {string || null}
         */
        this.CreatedTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.RefreshActivityId = 'RefreshActivityId' in params ? params.RefreshActivityId : null;
        this.OriginRefreshActivityId = 'OriginRefreshActivityId' in params ? params.OriginRefreshActivityId : null;

        if (params.RefreshBatchSet) {
            this.RefreshBatchSet = new Array();
            for (let z in params.RefreshBatchSet) {
                let obj = new RefreshBatch();
                obj.deserialize(params.RefreshBatchSet[z]);
                this.RefreshBatchSet.push(obj);
            }
        }
        this.RefreshMode = 'RefreshMode' in params ? params.RefreshMode : null;

        if (params.RefreshSettings) {
            let obj = new RefreshSettings();
            obj.deserialize(params.RefreshSettings)
            this.RefreshSettings = obj;
        }
        this.ActivityType = 'ActivityType' in params ? params.ActivityType : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.CurrentRefreshBatchNum = 'CurrentRefreshBatchNum' in params ? params.CurrentRefreshBatchNum : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

    }
}

/**
 * DescribeNotificationConfigurations request structure.
 * @class
 */
class DescribeNotificationConfigurationsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Query by one or more notification ids. the list length limit is 100. you can obtain the notification ID by logging in to the console (https://console.cloud.tencent.com/autoscaling/group). parameters AutoScalingNotificationIds and Filters must not be specified simultaneously.
         * @type {Array.<string> || null}
         */
        this.AutoScalingNotificationIds = null;

        /**
         * Filter criteria

<li> auto-scaling-notification-id - String - required: no - (filter) filter by notification id.</li>.
<li> auto-scaling-group-id - String - required: no - (filter) filter by auto scaling group id. you can obtain the scaling group id by logging in to the console (https://console.cloud.tencent.com/autoscaling/group) or calling the api DescribeAutoScalingGroups (https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the returned information.</li>.
The maximum number of `Filters` per request is 10, and that of `Filter.Values` is 5. the `AutoScalingNotificationIds` and `Filters` parameters cannot be specified simultaneously.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Number of returned results. Default value: 20. Maximum value: 100. For more information on `Limit`, see the relevant section in the API [overview](https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Offset. Default value: 0. For more information on `Offset`, see the relevant section in the API [overview](https://intl.cloud.tencent.com/document/api/213/15688?from_cn_redirect=1).
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingNotificationIds = 'AutoScalingNotificationIds' in params ? params.AutoScalingNotificationIds : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * ScaleInInstances request structure.
 * @class
 */
class ScaleInInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. obtain available scaling group ids in the following ways:.
<li>Query the scaling group ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group).</li>.
<li>Specifies the scaling group ID obtained by calling the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the return information.</li>.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Number of resource instances to scale in. this parameter has a static value range of [1,2000] and must not be larger than the difference between the desired number and the minimum value. for example, if the scaling group desired number is 100 and the minimum value is 20, the permissible range is [1,80].
         * @type {number || null}
         */
        this.ScaleInNumber = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.ScaleInNumber = 'ScaleInNumber' in params ? params.ScaleInNumber : null;

    }
}

/**
 * Lifecycle hook
 * @class
 */
class LifecycleHook extends  AbstractModel {
    constructor(){
        super();

        /**
         * Lifecycle hook ID
         * @type {string || null}
         */
        this.LifecycleHookId = null;

        /**
         * Lifecycle hook name
         * @type {string || null}
         */
        this.LifecycleHookName = null;

        /**
         * Auto scaling group ID
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Action to be taken by the scaling group in case of lifecycle hook timeout or LifecycleCommand execution failure. valid values:.
-CONTINUE execution by default means capacity expansion or reduction.
-For scale-out hooks, cvms with hook timeout or failed LifecycleCommand execution will be released directly or removed; for scale-in hooks, scale-in activities will continue.
         * @type {string || null}
         */
        this.DefaultResult = null;

        /**
         * Specifies the timeout waiting time of the lifecycle hook in seconds. value range: 30 to 7200.
         * @type {number || null}
         */
        this.HeartbeatTimeout = null;

        /**
         * Scenario for entering the lifecycle hook. valid values:.
-`INSTANCE_LAUNCHING`: the lifecycle hook is being scaled out.
-INSTANCE_TERMINATING: scale-in lifecycle hook.
         * @type {string || null}
         */
        this.LifecycleTransition = null;

        /**
         * Additional information for the notification target
         * @type {string || null}
         */
        this.NotificationMetadata = null;

        /**
         * Creation time. uses UTC for timing.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * Notification target
         * @type {NotificationTarget || null}
         */
        this.NotificationTarget = null;

        /**
         * Specifies the scenario type for performing the lifecycle hook. valid values: NORMAL and EXTENSION. default value: NORMAL.
Description: when set to `EXTENSION`, the lifecycle hook will be triggered during `AttachInstances`, `DetachInstances`, or `RemoveInstances` API calls. if set to `NORMAL`, the lifecycle hook will not be triggered by these apis.
         * @type {string || null}
         */
        this.LifecycleTransitionType = null;

        /**
         * Remote command execution object.
         * @type {LifecycleCommand || null}
         */
        this.LifecycleCommand = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LifecycleHookId = 'LifecycleHookId' in params ? params.LifecycleHookId : null;
        this.LifecycleHookName = 'LifecycleHookName' in params ? params.LifecycleHookName : null;
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.DefaultResult = 'DefaultResult' in params ? params.DefaultResult : null;
        this.HeartbeatTimeout = 'HeartbeatTimeout' in params ? params.HeartbeatTimeout : null;
        this.LifecycleTransition = 'LifecycleTransition' in params ? params.LifecycleTransition : null;
        this.NotificationMetadata = 'NotificationMetadata' in params ? params.NotificationMetadata : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

        if (params.NotificationTarget) {
            let obj = new NotificationTarget();
            obj.deserialize(params.NotificationTarget)
            this.NotificationTarget = obj;
        }
        this.LifecycleTransitionType = 'LifecycleTransitionType' in params ? params.LifecycleTransitionType : null;

        if (params.LifecycleCommand) {
            let obj = new LifecycleCommand();
            obj.deserialize(params.LifecycleCommand)
            this.LifecycleCommand = obj;
        }

    }
}

/**
 * Application load balancer
 * @class
 */
class ForwardLoadBalancer extends  AbstractModel {
    constructor(){
        super();

        /**
         * ID of the load balancer. this parameter is required as an input parameter. you can obtain it through the [DescribeLoadBalancers](https://intl.cloud.tencent.com/document/product/214/30685?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.LoadBalancerId = null;

        /**
         * CLB listener ID. as an input parameter, this parameter is required. you can obtain it through the [DescribeLoadBalancers](https://intl.cloud.tencent.com/document/product/214/30685?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.ListenerId = null;

        /**
         * Target rule attribute list. as an input parameter, this parameter is required.
         * @type {Array.<TargetAttribute> || null}
         */
        this.TargetAttributes = null;

        /**
         * The forwarding rule ID. note: this parameter is required for layer-7 (http/https) listeners. it can be obtained through the [DescribeLoadBalancers](https://intl.cloud.tencent.com/document/product/214/30685?from_cn_redirect=1) api.
         * @type {string || null}
         */
        this.LocationId = null;

        /**
         * The region of CLB instance. It defaults to the region of AS service and is in the format of the common parameter `Region`, such as `ap-guangzhou`.
         * @type {string || null}
         */
        this.Region = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LoadBalancerId = 'LoadBalancerId' in params ? params.LoadBalancerId : null;
        this.ListenerId = 'ListenerId' in params ? params.ListenerId : null;

        if (params.TargetAttributes) {
            this.TargetAttributes = new Array();
            for (let z in params.TargetAttributes) {
                let obj = new TargetAttribute();
                obj.deserialize(params.TargetAttributes[z]);
                this.TargetAttributes.push(obj);
            }
        }
        this.LocationId = 'LocationId' in params ? params.LocationId : null;
        this.Region = 'Region' in params ? params.Region : null;

    }
}

/**
 * ClearLaunchConfigurationAttributes request structure.
 * @class
 */
class ClearLaunchConfigurationAttributesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Launch configuration ID. obtain in the following ways:.
<li>Queries the launch configuration ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/config).</li>.
<li>Get the launch configuration ID by calling the api [DescribeLaunchConfigurations](https://intl.cloud.tencent.com/document/api/377/20445?from_cn_redirect=1) and retrieving the LaunchConfigurationId from the returned information.</li>.
         * @type {string || null}
         */
        this.LaunchConfigurationId = null;

        /**
         * Whether to clear data disk information. This parameter is optional and the default value is `false`.
Setting it to `true` will clear data disks, which means that CVM newly created on this launch configuration will have no data disk.
         * @type {boolean || null}
         */
        this.ClearDataDisks = null;

        /**
         * Whether to clear the CVM hostname settings. This parameter is optional and the default value is `false`.
Setting it to `true` will clear the hostname settings, which means that CVM newly created on this launch configuration will have no hostname.
         * @type {boolean || null}
         */
        this.ClearHostNameSettings = null;

        /**
         * Whether to clear the CVM instance name settings. This parameter is optional and the default value is `false`.
Setting it to `true` will clear the instance name settings, which means that CVM newly created on this launch configuration will be named in the as-{{AutoScalingGroupName}} format.
         * @type {boolean || null}
         */
        this.ClearInstanceNameSettings = null;

        /**
         * Whether to clear placement group information. This parameter is optional. Default value: `false`.
`True` means clearing placement group information. After that, no placement groups are specified for CVMs created based on the information.
         * @type {boolean || null}
         */
        this.ClearDisasterRecoverGroupIds = null;

        /**
         * Whether to clear the instance tag list. This parameter is optional, and its default value is false.
If true is filled in, it indicates that the instance tag list should be cleared. After the list is cleared, the CVMs created based on this will not be bound to the tags in the list.
         * @type {boolean || null}
         */
        this.ClearInstanceTags = null;

        /**
         * Whether to clear metadata, optional, defaults to false. Setting it to true will clear metadata, the CVMs created based on this will not be associated with custom metadata.
         * @type {boolean || null}
         */
        this.ClearMetadata = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LaunchConfigurationId = 'LaunchConfigurationId' in params ? params.LaunchConfigurationId : null;
        this.ClearDataDisks = 'ClearDataDisks' in params ? params.ClearDataDisks : null;
        this.ClearHostNameSettings = 'ClearHostNameSettings' in params ? params.ClearHostNameSettings : null;
        this.ClearInstanceNameSettings = 'ClearInstanceNameSettings' in params ? params.ClearInstanceNameSettings : null;
        this.ClearDisasterRecoverGroupIds = 'ClearDisasterRecoverGroupIds' in params ? params.ClearDisasterRecoverGroupIds : null;
        this.ClearInstanceTags = 'ClearInstanceTags' in params ? params.ClearInstanceTags : null;
        this.ClearMetadata = 'ClearMetadata' in params ? params.ClearMetadata : null;

    }
}

/**
 * Instance name index settings.
 * @class
 */
class InstanceNameIndexSettings extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether to enable instance name index. Default value: false. Value range:.

**true**: indicates that instance name index is enabled.
**false**: indicates that instance name index is disabled.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.Enabled = null;

        /**
         * Begin index number. Value range: [0, 99999999].

Indicates that the scale out activity will be failed when the index out of range. 
If not specified, carries forward historical index number or 0.
Lowering the index sequence number may lead to instance name duplication within the group.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.BeginIndex = null;

        /**
         * Instance name index number digits, defaults to 0, means no specified digit count. Value range: 0-8, maximum is integer 8. when using values 1-8, the system checks whether the index number exceeds the maximum digit for this digit count.

If set to 3, index number is in the format: 000, 001, 002 ... 010, 011 ... 100 ... 999. The maximum is 999. 
Assuming set to 0, the index number is 0, 1, 2 ... 10, 11 ... 100 ... 1000 ...10000 ... 99999999. Max number is 99999999.
         * @type {number || null}
         */
        this.IndexLength = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Enabled = 'Enabled' in params ? params.Enabled : null;
        this.BeginIndex = 'BeginIndex' in params ? params.BeginIndex : null;
        this.IndexLength = 'IndexLength' in params ? params.IndexLength : null;

    }
}

/**
 * DeleteAutoScalingGroup request structure.
 * @class
 */
class DeleteAutoScalingGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. obtain the scaling group ID by logging in to the console (https://console.cloud.tencent.com/autoscaling/group) or calling the api DescribeAutoScalingGroups (https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1), and retrieve AutoScalingGroupId from the returned information.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;

    }
}

/**
 * Suggestions for scaling group configurations.
 * @class
 */
class AutoScalingAdvice extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Scaling group warning level. Valid values:
<li>NORMAL: normal.</li>
<li>WARNING: warning.</li>
<li>CRITICAL: critical.</li>
         * @type {string || null}
         */
        this.Level = null;

        /**
         * A collection of suggestions for scaling group configurations.
         * @type {Array.<Advice> || null}
         */
        this.Advices = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.Level = 'Level' in params ? params.Level : null;

        if (params.Advices) {
            this.Advices = new Array();
            for (let z in params.Advices) {
                let obj = new Advice();
                obj.deserialize(params.Advices[z]);
                this.Advices.push(obj);
            }
        }

    }
}

/**
 * StartAutoScalingInstances request structure.
 * @class
 */
class StartAutoScalingInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. obtain available scaling group ids in the following ways:.
<li>Query the scaling group ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group).</li>.
<li>Specifies the scaling group ID obtained by calling the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the return information.</li>.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Specifies the instance ID list of CVM to enable. you can obtain available instance ID in the following ways.
<li>Query instance ID by logging in to the <a href="https://console.cloud.tencent.com/cvm/index">console</a>.</li>.
<li>Get the instance ID by calling the api [DescribeInstances](https://intl.cloud.tencent.com/document/api/213/15728?from_cn_redirect=1) and retrieving the `InstanceId` from the returned information.</li>.
         * @type {Array.<string> || null}
         */
        this.InstanceIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.InstanceIds = 'InstanceIds' in params ? params.InstanceIds : null;

    }
}

/**
 * AttachInstances request structure.
 * @class
 */
class AttachInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. obtain available scaling group ids in the following ways:.
<li>Query the scaling group ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group).</li>.
<li>Specifies the scaling group ID obtained by calling the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the return information.</li>.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * CVM instance ID list. you can obtain available instance ID in the following ways:.
<li>Query instance ID by logging in to the <a href="https://console.cloud.tencent.com/cvm/index">console</a>.</li>.
<li>Get the instance ID by calling the api [DescribeInstances](https://intl.cloud.tencent.com/document/api/213/15728?from_cn_redirect=1) and retrieving the `InstanceId` from the returned information.</li>.
         * @type {Array.<string> || null}
         */
        this.InstanceIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.InstanceIds = 'InstanceIds' in params ? params.InstanceIds : null;

    }
}

/**
 * StopInstanceRefresh response structure.
 * @class
 */
class StopInstanceRefreshResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AttachLoadBalancers request structure.
 * @class
 */
class AttachLoadBalancersRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scaling group ID. obtain the scaling group ID by logging in to the console (https://console.cloud.tencent.com/autoscaling/group) or calling the api DescribeAutoScalingGroups (https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1), and retrieve AutoScalingGroupId from the returned information.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Specifies a list of classic clb ids. each scaling group can bind a maximum of 20 classic clbs. either LoadBalancerIds or ForwardLoadBalancers can be specified at the same time. can be obtained through the [DescribeLoadBalancers](https://intl.cloud.tencent.com/document/product/214/30685?from_cn_redirect=1) api.
         * @type {Array.<string> || null}
         */
        this.LoadBalancerIds = null;

        /**
         * Specifies the list of load balancers. each scaling group can bind a maximum of 100 application clbs. either LoadBalancerIds or ForwardLoadBalancers can be specified at the same time. can be obtained through the [DescribeLoadBalancers](https://intl.cloud.tencent.com/document/product/214/30685?from_cn_redirect=1) api.
         * @type {Array.<ForwardLoadBalancer> || null}
         */
        this.ForwardLoadBalancers = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.LoadBalancerIds = 'LoadBalancerIds' in params ? params.LoadBalancerIds : null;

        if (params.ForwardLoadBalancers) {
            this.ForwardLoadBalancers = new Array();
            for (let z in params.ForwardLoadBalancers) {
                let obj = new ForwardLoadBalancer();
                obj.deserialize(params.ForwardLoadBalancers[z]);
                this.ForwardLoadBalancers.push(obj);
            }
        }

    }
}

/**
 * Specifies how to assign pay-as-you-go instances and spot instances in a mixed instance mode.
 * @class
 */
class SpotMixedAllocationPolicy extends  AbstractModel {
    constructor(){
        super();

        /**
         * The minimum number of the scaling group’s capacity that must be fulfilled by pay-as-you-go instances. It defaults to 0 if not specified. Its value cannot exceed the max capacity of the scaling group.
Note: this field may return `null`, indicating that no valid value can be obtained.
         * @type {number || null}
         */
        this.BaseCapacity = null;

        /**
         * Controls the percentage of pay-as-you-go instances for the additional capacity beyond `BaseCapacity`. Valid range: 0-100. The value 0 indicates that only spot instances are provisioned, while the value 100 indicates that only pay-as-you-go instances are provisioned. It defaults to 70 if not specified. The number of pay-as-you-go instances calculated on the percentage should be rounded up.
For example, if the desired capacity is 3, the `BaseCapacity` is set to 1, and the `OnDemandPercentageAboveBaseCapacity` is set to 1, the scaling group will have 2 pay-as-you-go instance (one comes from the base capacity, and the other comes from the rounded up value of the proportion), and 1 spot instance.
Note: this field may return `null`, indicating that no valid value can be obtained.
         * @type {number || null}
         */
        this.OnDemandPercentageAboveBaseCapacity = null;

        /**
         * Specifies how to assign spot instances in a mixed instance mode. Valid values: `COST_OPTIMIZED` and `CAPACITY_OPTIMIZED`; default value: `COST_OPTIMIZED`.
<br><li>`COST_OPTIMIZED`: the lowest cost policy. For each model in the launch configuration, AS tries to purchase it based on the lowest unit price per core in each availability zone. If the purchase failed, try the second-lowest unit price.
<br><li>`CAPACITY_OPTIMIZED`: the optimal capacity policy. For each model in the launch configuration, AS tries to purchase it based on the largest stock in each availability zone, minimizing the automatic repossession probability of spot instances.
Note: this field may return `null`, indicating that no valid value can be obtained.
         * @type {string || null}
         */
        this.SpotAllocationStrategy = null;

        /**
         * Whether to replace with pay-as-you go instances. Valid values:
<br><li>`TRUE`: yes. After the purchase of spot instances failed due to insufficient stock and other reasons, purchase pay-as-you-go instances.
<br><li>`FALSE`: no. The scaling group only tries the configured model of spot instances when it needs to add spot instances.

Default value: `TRUE`.
Note: this field may return `null`, indicating that no valid value can be obtained.
         * @type {boolean || null}
         */
        this.CompensateWithBaseInstance = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BaseCapacity = 'BaseCapacity' in params ? params.BaseCapacity : null;
        this.OnDemandPercentageAboveBaseCapacity = 'OnDemandPercentageAboveBaseCapacity' in params ? params.OnDemandPercentageAboveBaseCapacity : null;
        this.SpotAllocationStrategy = 'SpotAllocationStrategy' in params ? params.SpotAllocationStrategy : null;
        this.CompensateWithBaseInstance = 'CompensateWithBaseInstance' in params ? params.CompensateWithBaseInstance : null;

    }
}

/**
 * UpgradeLifecycleHook request structure.
 * @class
 */
class UpgradeLifecycleHookRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Lifecycle hook ID. you can call the api [DescribeLifecycleHooks](https://intl.cloud.tencent.com/document/api/377/34452?from_cn_redirect=1) and retrieve the LifecycleHookId from the returned information to obtain the lifecycle hook ID.
         * @type {string || null}
         */
        this.LifecycleHookId = null;

        /**
         * Lifecycle hook name, which can contain chinese characters, letters, numbers, underscores (_), hyphens (-), and periods (.) with a maximum length of 128 characters.
         * @type {string || null}
         */
        this.LifecycleHookName = null;

        /**
         * Scenario for performing the lifecycle hook. valid values:.
`INSTANCE_LAUNCHING`: the lifecycle hook is being scaled out.
`INSTANCE_TERMINATING`: the lifecycle hook is being scaled in.
         * @type {string || null}
         */
        this.LifecycleTransition = null;

        /**
         * Action to be taken by the scaling group in case of lifecycle hook timeout or LifecycleCommand execution failure. valid values are as follows:.
Default value, means CONTINUE to execute capacity expansion or reduction.
* ABANDON: for scale-out hooks, cvms that time out or fail to execute LifecycleCommand will be released directly or removed. for scale-in hooks, scale-in activities will continue.
         * @type {string || null}
         */
        this.DefaultResult = null;

        /**
         * The maximum length of time (in seconds) that can elapse before the lifecycle hook times out. Value range: 30-7200. Default value: 300
         * @type {number || null}
         */
        this.HeartbeatTimeout = null;

        /**
         * Additional information sent by auto scaling to notification targets, used when configuring a notification (default value: ""). NotificationMetadata and LifecycleCommand are mutually exclusive parameters and cannot be specified simultaneously.
         * @type {string || null}
         */
        this.NotificationMetadata = null;

        /**
         * Notification result. `NotificationTarget` and `LifecycleCommand` cannot be specified at the same time.
         * @type {NotificationTarget || null}
         */
        this.NotificationTarget = null;

        /**
         * The scenario where the lifecycle hook is applied. `EXTENSION`: the lifecycle hook will be triggered when AttachInstances, DetachInstances or RemoveInstaces is called. `NORMAL`: the lifecycle hook is not triggered by the above APIs. 
         * @type {string || null}
         */
        this.LifecycleTransitionType = null;

        /**
         * Remote command execution object. `NotificationMetadata`, `NotificationTarget`, and `LifecycleCommand` are mutually exclusive and cannot be specified simultaneously.
         * @type {LifecycleCommand || null}
         */
        this.LifecycleCommand = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LifecycleHookId = 'LifecycleHookId' in params ? params.LifecycleHookId : null;
        this.LifecycleHookName = 'LifecycleHookName' in params ? params.LifecycleHookName : null;
        this.LifecycleTransition = 'LifecycleTransition' in params ? params.LifecycleTransition : null;
        this.DefaultResult = 'DefaultResult' in params ? params.DefaultResult : null;
        this.HeartbeatTimeout = 'HeartbeatTimeout' in params ? params.HeartbeatTimeout : null;
        this.NotificationMetadata = 'NotificationMetadata' in params ? params.NotificationMetadata : null;

        if (params.NotificationTarget) {
            let obj = new NotificationTarget();
            obj.deserialize(params.NotificationTarget)
            this.NotificationTarget = obj;
        }
        this.LifecycleTransitionType = 'LifecycleTransitionType' in params ? params.LifecycleTransitionType : null;

        if (params.LifecycleCommand) {
            let obj = new LifecycleCommand();
            obj.deserialize(params.LifecycleCommand)
            this.LifecycleCommand = obj;
        }

    }
}

/**
 * ResumeInstanceRefresh response structure.
 * @class
 */
class ResumeInstanceRefreshResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeScalingPolicies response structure.
 * @class
 */
class DescribeScalingPoliciesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * List of AS alarm trigger policy details.
         * @type {Array.<ScalingPolicy> || null}
         */
        this.ScalingPolicySet = null;

        /**
         * Number of eligible notifications.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ScalingPolicySet) {
            this.ScalingPolicySet = new Array();
            for (let z in params.ScalingPolicySet) {
                let obj = new ScalingPolicy();
                obj.deserialize(params.ScalingPolicySet[z]);
                this.ScalingPolicySet.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Information of auto scaling activity.
 * @class
 */
class Activity extends  AbstractModel {
    constructor(){
        super();

        /**
         * Auto scaling group ID.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * Scaling activity ID.
         * @type {string || null}
         */
        this.ActivityId = null;

        /**
         * Scaling activity type. Valid values:
<li>SCALE_OUT: Scale out instance(s).</li>
<li>SCALE_IN: Scale in instance(s).</li>
<li>ATTACH_INSTANCES: Add instance(s).</li>
<li>REMOVE_INSTANCES: Terminate instance(s).</li>
<li>DETACH_INSTANCES: Remove instance(s).</li>
<li>TERMINATE_INSTANCES_UNEXPECTEDLY: Instance(s) unexpectedly terminated in the CVM console.</li>
<li>REPLACE_UNHEALTHY_INSTANCE: Replace unhealthy instance(s).</li>
<li>START_INSTANCES: Start instance(s).</li>
<li>STOP_INSTANCES: Stop instance(s).</li>
<li>INVOKE_COMMAND: Execute a command in instance(s).</li>
         * @type {string || null}
         */
        this.ActivityType = null;

        /**
         * Scaling activity status. Valid values:
<li>INIT: initializing.</li>
<li>RUNNING: running.</li>
<li>SUCCESSFUL: successful.</li>
<li>PARTIALLY_SUCCESSFUL: partially successful.</li>
<li>FAILED: failed.</li>
<li>CANCELLED: canceled.</li>
         * @type {string || null}
         */
        this.StatusCode = null;

        /**
         * Description of the scaling activity status.
         * @type {string || null}
         */
        this.StatusMessage = null;

        /**
         * Cause of the scaling activity.
         * @type {string || null}
         */
        this.Cause = null;

        /**
         * Description of the scaling activity.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Start time of the auto scaling activity in UTC standard time.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time of the scaling activity in UTC standard time.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Create time of the scaling activity in UTC standard time.
         * @type {string || null}
         */
        this.CreatedTime = null;

        /**
         * This parameter has been deprecated.
         * @type {Array.<ActivtyRelatedInstance> || null}
         */
        this.ActivityRelatedInstanceSet = null;

        /**
         * Brief description of the scaling activity status.
         * @type {string || null}
         */
        this.StatusMessageSimplified = null;

        /**
         * Result of the lifecycle hook action in the scaling activity
         * @type {Array.<LifecycleActionResultInfo> || null}
         */
        this.LifecycleActionResultSet = null;

        /**
         * Detailed description of the scaling activity status
         * @type {Array.<DetailedStatusMessage> || null}
         */
        this.DetailedStatusMessageSet = null;

        /**
         * Result of the command execution
         * @type {Array.<InvocationResult> || null}
         */
        this.InvocationResultSet = null;

        /**
         * Related instance information set of the scaling activity.
         * @type {Array.<RelatedInstance> || null}
         */
        this.RelatedInstanceSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.ActivityId = 'ActivityId' in params ? params.ActivityId : null;
        this.ActivityType = 'ActivityType' in params ? params.ActivityType : null;
        this.StatusCode = 'StatusCode' in params ? params.StatusCode : null;
        this.StatusMessage = 'StatusMessage' in params ? params.StatusMessage : null;
        this.Cause = 'Cause' in params ? params.Cause : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;

        if (params.ActivityRelatedInstanceSet) {
            this.ActivityRelatedInstanceSet = new Array();
            for (let z in params.ActivityRelatedInstanceSet) {
                let obj = new ActivtyRelatedInstance();
                obj.deserialize(params.ActivityRelatedInstanceSet[z]);
                this.ActivityRelatedInstanceSet.push(obj);
            }
        }
        this.StatusMessageSimplified = 'StatusMessageSimplified' in params ? params.StatusMessageSimplified : null;

        if (params.LifecycleActionResultSet) {
            this.LifecycleActionResultSet = new Array();
            for (let z in params.LifecycleActionResultSet) {
                let obj = new LifecycleActionResultInfo();
                obj.deserialize(params.LifecycleActionResultSet[z]);
                this.LifecycleActionResultSet.push(obj);
            }
        }

        if (params.DetailedStatusMessageSet) {
            this.DetailedStatusMessageSet = new Array();
            for (let z in params.DetailedStatusMessageSet) {
                let obj = new DetailedStatusMessage();
                obj.deserialize(params.DetailedStatusMessageSet[z]);
                this.DetailedStatusMessageSet.push(obj);
            }
        }

        if (params.InvocationResultSet) {
            this.InvocationResultSet = new Array();
            for (let z in params.InvocationResultSet) {
                let obj = new InvocationResult();
                obj.deserialize(params.InvocationResultSet[z]);
                this.InvocationResultSet.push(obj);
            }
        }

        if (params.RelatedInstanceSet) {
            this.RelatedInstanceSet = new Array();
            for (let z in params.RelatedInstanceSet) {
                let obj = new RelatedInstance();
                obj.deserialize(params.RelatedInstanceSet[z]);
                this.RelatedInstanceSet.push(obj);
            }
        }

    }
}

/**
 * ModifyDesiredCapacity response structure.
 * @class
 */
class ModifyDesiredCapacityResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * StopAutoScalingInstances request structure.
 * @class
 */
class StopAutoScalingInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Auto scaling group ID. obtain available scaling group ids in the following ways:.
<li>Query the scaling group ID by logging in to the [console](https://console.cloud.tencent.com/autoscaling/group).</li>.
<li>Specifies the scaling group ID obtained by calling the api [DescribeAutoScalingGroups](https://intl.cloud.tencent.com/document/api/377/20438?from_cn_redirect=1) and retrieving the AutoScalingGroupId from the return information.</li>.
         * @type {string || null}
         */
        this.AutoScalingGroupId = null;

        /**
         * List of CVM instance ids to be closed. you can obtain available instance ids in the following ways:.
<li>Query instance ID by logging in to the <a href="https://console.cloud.tencent.com/cvm/index">console</a>.</li>.
<li>Specifies the instance ID by calling the api [DescribeInstances](https://intl.cloud.tencent.com/document/api/213/15728?from_cn_redirect=1) and getting `InstanceId` from the return information.</li>.
         * @type {Array.<string> || null}
         */
        this.InstanceIds = null;

        /**
         * Whether the shutdown instances will be charged. Valid values:  
KEEP_CHARGING: keep charging after shutdown.  
STOP_CHARGING: stop charging after shutdown.
Default value: KEEP_CHARGING.
         * @type {string || null}
         */
        this.StoppedMode = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupId = 'AutoScalingGroupId' in params ? params.AutoScalingGroupId : null;
        this.InstanceIds = 'InstanceIds' in params ? params.InstanceIds : null;
        this.StoppedMode = 'StoppedMode' in params ? params.StoppedMode : null;

    }
}

/**
 * Information related to Tencent Cloud Observability Platform (TCOP, formerly Cloud Monitor).
 * @class
 */
class RunMonitorServiceEnabled extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether to enable [Tencent Cloud Observability Platform (formerly Cloud Monitor)](https://intl.cloud.tencent.com/document/product/248?from_cn_redirect=1) (TCOP). Valid values:
<li>TRUE: enable TCOP.</li>
<li>FALSE: disable TCOP.</li>
Default value: TRUE.
         * @type {boolean || null}
         */
        this.Enabled = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Enabled = 'Enabled' in params ? params.Enabled : null;

    }
}

/**
 * A set of key-value pair information for custom Metadata
 * @class
 */
class MetadataItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom metadata key.
         * @type {string || null}
         */
        this.Key = null;

        /**
         * Custom metadata value.
         * @type {string || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Key = 'Key' in params ? params.Key : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * CancelInstanceRefresh response structure.
 * @class
 */
class CancelInstanceRefreshResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Information of the instances related to the current scaling activity.
 * @class
 */
class ActivtyRelatedInstance extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Status of the instance in the scaling activity. Valid values: <br><li>INIT: initializing;</li> <li>RUNNING: instance in operation;</li> <li>SUCCESSFUL: activity successful;</li> <li>FAILED: activity failed.
         * @type {string || null}
         */
        this.InstanceStatus = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceStatus = 'InstanceStatus' in params ? params.InstanceStatus : null;

    }
}

/**
 * CreateAutoScalingGroupFromInstance request structure.
 * @class
 */
class CreateAutoScalingGroupFromInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The scaling group name. It must be unique under your account. The name can only contain letters, numbers, underscore, hyphen "-" and periods. It cannot exceed 55 bytes.
         * @type {string || null}
         */
        this.AutoScalingGroupName = null;

        /**
         * Instance ID. you can get the instance ID by logging in to the [console](https://console.cloud.tencent.com/cvm/index) or making an api call to [DescribeInstances](https://intl.cloud.tencent.com/document/api/213/15728?from_cn_redirect=1) and retrieving the `InstanceId` from the returned information.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Minimum number of instances. value range: [0,2000]. to meet MaxSize >= DesiredCapacity >= MinSize at the same time.
         * @type {number || null}
         */
        this.MinSize = null;

        /**
         * Maximum instance count. value range [0,2000]. to meet MaxSize >= DesiredCapacity >= MinSize.
         * @type {number || null}
         */
        this.MaxSize = null;

        /**
         * Expected number of instances, value ranges from 0 to 2000, default value equals current MinSize, to meet MaxSize >= DesiredCapacity >= MinSize.
         * @type {number || null}
         */
        this.DesiredCapacity = null;

        /**
         * Whether to inherit the instance tag. Default value: False
         * @type {boolean || null}
         */
        this.InheritInstanceTag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingGroupName = 'AutoScalingGroupName' in params ? params.AutoScalingGroupName : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.MinSize = 'MinSize' in params ? params.MinSize : null;
        this.MaxSize = 'MaxSize' in params ? params.MaxSize : null;
        this.DesiredCapacity = 'DesiredCapacity' in params ? params.DesiredCapacity : null;
        this.InheritInstanceTag = 'InheritInstanceTag' in params ? params.InheritInstanceTag : null;

    }
}

/**
 * This describes the internet accessibility of the instance created by a launch configuration and declares the internet usage billing method of the instance and the maximum bandwidth
 * @class
 */
class InternetAccessible extends  AbstractModel {
    constructor(){
        super();

        /**
         * Network billing type. Valid values: <li>BANDWIDTH_PREPAID: prepaid by bandwidth;</li> <li>TRAFFIC_POSTPAID_BY_HOUR: postpaid by traffic per hour;</li> <li>BANDWIDTH_POSTPAID_BY_HOUR: postpaid by bandwidth per hour;</li> <li>BANDWIDTH_PACKAGE: bandwidth package users.</li> Default value: TRAFFIC_POSTPAID_BY_HOUR.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InternetChargeType = null;

        /**
         * The maximum outbound bandwidth in Mbps of the public network. The default value is 0 Mbps. The upper limit of bandwidth varies by model. For more information, see [Purchase Network Bandwidth](https://intl.cloud.tencent.com/document/product/213/509?from_cn_redirect=1).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.InternetMaxBandwidthOut = null;

        /**
         * Whether to assign a public IP address. Valid values: <li>TRUE: Allocate a public IP address.</li> <li>FALSE: Do not allocate a public IP address.</li> When the public network bandwidth is greater than 0 Mbps, you can choose whether to enable this feature based on your needs. By default, this feature is enabled. When the public network bandwidth is 0, public IP address assignment is not allowed.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.PublicIpAssigned = null;

        /**
         * Bandwidth package ID. You can obtain the ID from the `BandwidthPackageId` field in the response of the [DescribeBandwidthPackages](https://intl.cloud.tencent.com/document/api/215/19209?from_cn_redirect=1) API.
Note: this field may return null, indicating that no valid value was found.
         * @type {string || null}
         */
        this.BandwidthPackageId = null;

        /**
         * Describes the line type. For details, refer to [EIP Product Overview](https://www.tencentcloud.com/document/product/213/5733). default value: `BGP`.

<Li>BGP: general bgp line.</li>
For a user who has enabled the static single-line IP allowlist, valid values include:
 <li>CMCC: China Mobile</li> <li>CTCC: China Telecom</li> <li>CUCC: China Unicom</li>
Note: Only certain regions support static single-line IP addresses.

         * @type {string || null}
         */
        this.InternetServiceProvider = null;

        /**
         * Type of public IP address.

<li> WanIP: Ordinary public IP address. </li> <li> HighQualityEIP: High Quality EIP is supported only in Singapore and Hong Kong. </li> <li> AntiDDoSEIP: Anti-DDoS IP is supported only in specific regions. For details, see [EIP Product Overview](https://www.tencentcloud.com/document/product/213/5733). </li> 
Specify the type of public IPv4 address to assign a public IPv4 address to the resource. HighQualityEIP and AntiDDoSEIP features are gradually released in select regions. For usage, [submit a ticket for consultation](https://console.tencentcloud.com/workorder).
         * @type {string || null}
         */
        this.IPv4AddressType = null;

        /**
         * Anti-DDoS service package ID. This is required when you want to request an Anti-DDoS IP.
         * @type {string || null}
         */
        this.AntiDDoSPackageId = null;

        /**
         * Whether to delete the bound EIP(HighQualityEIP and AntiDDoSEIP) when the instance is destroyed.

Range of values:

<li>TRUE: retain the EIP</li> <li>FALSE: not retain the EIP</li>Note that when the IPv4AddressType field specifies the EIP type, the default behavior is not to retain the EIP. 
WanIP is unaffected by this field and will always be deleted with the instance. 
Changing this field configuration will take effect immediately for resources already bound to a scaling group.
         * @type {boolean || null}
         */
        this.IsKeepEIP = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InternetChargeType = 'InternetChargeType' in params ? params.InternetChargeType : null;
        this.InternetMaxBandwidthOut = 'InternetMaxBandwidthOut' in params ? params.InternetMaxBandwidthOut : null;
        this.PublicIpAssigned = 'PublicIpAssigned' in params ? params.PublicIpAssigned : null;
        this.BandwidthPackageId = 'BandwidthPackageId' in params ? params.BandwidthPackageId : null;
        this.InternetServiceProvider = 'InternetServiceProvider' in params ? params.InternetServiceProvider : null;
        this.IPv4AddressType = 'IPv4AddressType' in params ? params.IPv4AddressType : null;
        this.AntiDDoSPackageId = 'AntiDDoSPackageId' in params ? params.AntiDDoSPackageId : null;
        this.IsKeepEIP = 'IsKeepEIP' in params ? params.IsKeepEIP : null;

    }
}

/**
 * EnableAutoScalingGroup response structure.
 * @class
 */
class EnableAutoScalingGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpgradeLaunchConfiguration response structure.
 * @class
 */
class UpgradeLaunchConfigurationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * This API is used to describe the billing mode of an instance.
 * @class
 */
class InstanceChargePrepaid extends  AbstractModel {
    constructor(){
        super();

        /**
         * Purchased usage period of an instance in months. Value range: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36.
         * @type {number || null}
         */
        this.Period = null;

        /**
         * Auto-renewal flag. Valid values: <li>NOTIFY_AND_AUTO_RENEW: Notify upon expiration and automatically renew.</li> <li>NOTIFY_AND_MANUAL_RENEW: Notify upon expiration but do not auto-renew.</li> <li>DISABLE_NOTIFY_AND_MANUAL_RENEW: Do not notify and do not auto-renew</li> Default value: NOTIFY_AND_MANUAL_RENEW. If this parameter is set to NOTIFY_AND_AUTO_RENEW, and the account balance is sufficient, the instance will automatically renew monthly upon its expiration date.
         * @type {string || null}
         */
        this.RenewFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Period = 'Period' in params ? params.Period : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;

    }
}

/**
 * DeleteLifecycleHook response structure.
 * @class
 */
class DeleteLifecycleHookResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ExecuteScalingPolicy request structure.
 * @class
 */
class ExecuteScalingPolicyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Alarm scaling policy ID. target tracking policy is unsupported. the alert policy type can be obtained via the `ScalingPolicyType` parameter in the api response of [DescribeScalingPolicies](https://intl.cloud.tencent.com/document/api/377/33178?from_cn_redirect=1).
         * @type {string || null}
         */
        this.AutoScalingPolicyId = null;

        /**
         * Whether to check if the auto scaling group is in the cooldown period. Default value: false
         * @type {boolean || null}
         */
        this.HonorCooldown = null;

        /**
         * Source that triggers the scaling policy. Valid values: API and CLOUD_MONITOR. Default value: API. The value `CLOUD_MONITOR` is specific to the Cloud Monitor service.
         * @type {string || null}
         */
        this.TriggerSource = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AutoScalingPolicyId = 'AutoScalingPolicyId' in params ? params.AutoScalingPolicyId : null;
        this.HonorCooldown = 'HonorCooldown' in params ? params.HonorCooldown : null;
        this.TriggerSource = 'TriggerSource' in params ? params.TriggerSource : null;

    }
}

module.exports = {
    DisableAutoScalingGroupResponse: DisableAutoScalingGroupResponse,
    ModifyLaunchConfigurationAttributesRequest: ModifyLaunchConfigurationAttributesRequest,
    DisableAutoScalingGroupRequest: DisableAutoScalingGroupRequest,
    DescribeRefreshActivitiesResponse: DescribeRefreshActivitiesResponse,
    ModifyAutoScalingGroupRequest: ModifyAutoScalingGroupRequest,
    ScaleOutInstancesRequest: ScaleOutInstancesRequest,
    AutoScalingNotification: AutoScalingNotification,
    ModifyScheduledActionRequest: ModifyScheduledActionRequest,
    DescribeAutoScalingGroupsRequest: DescribeAutoScalingGroupsRequest,
    LaunchConfiguration: LaunchConfiguration,
    Metadata: Metadata,
    DescribeAccountLimitsResponse: DescribeAccountLimitsResponse,
    CreateLaunchConfigurationResponse: CreateLaunchConfigurationResponse,
    RelatedInstance: RelatedInstance,
    Advice: Advice,
    EnterStandbyRequest: EnterStandbyRequest,
    CreateLifecycleHookResponse: CreateLifecycleHookResponse,
    ClearLaunchConfigurationAttributesResponse: ClearLaunchConfigurationAttributesResponse,
    DescribeAutoScalingGroupsResponse: DescribeAutoScalingGroupsResponse,
    CreateScheduledActionRequest: CreateScheduledActionRequest,
    ExitStandbyRequest: ExitStandbyRequest,
    SystemDisk: SystemDisk,
    SpotMarketOptions: SpotMarketOptions,
    StopAutoScalingInstancesResponse: StopAutoScalingInstancesResponse,
    DescribeScalingPoliciesRequest: DescribeScalingPoliciesRequest,
    InstanceNameSettings: InstanceNameSettings,
    DetailedStatusMessage: DetailedStatusMessage,
    ModifyScheduledActionResponse: ModifyScheduledActionResponse,
    AttachLoadBalancersResponse: AttachLoadBalancersResponse,
    ExecuteScalingPolicyResponse: ExecuteScalingPolicyResponse,
    ForwardLoadBalancerIdentification: ForwardLoadBalancerIdentification,
    SetInstancesProtectionResponse: SetInstancesProtectionResponse,
    StartAutoScalingInstancesResponse: StartAutoScalingInstancesResponse,
    CompleteLifecycleActionRequest: CompleteLifecycleActionRequest,
    CreateScalingPolicyResponse: CreateScalingPolicyResponse,
    CreateNotificationConfigurationResponse: CreateNotificationConfigurationResponse,
    DescribeRefreshActivitiesRequest: DescribeRefreshActivitiesRequest,
    DescribeLaunchConfigurationsResponse: DescribeLaunchConfigurationsResponse,
    RemoveInstancesRequest: RemoveInstancesRequest,
    DeleteScalingPolicyResponse: DeleteScalingPolicyResponse,
    Tag: Tag,
    DetachLoadBalancersRequest: DetachLoadBalancersRequest,
    DescribeAutoScalingInstancesRequest: DescribeAutoScalingInstancesRequest,
    ModifyLoadBalancersRequest: ModifyLoadBalancersRequest,
    RemoveInstancesResponse: RemoveInstancesResponse,
    ModifyScalingPolicyResponse: ModifyScalingPolicyResponse,
    DeleteLaunchConfigurationRequest: DeleteLaunchConfigurationRequest,
    SetInstancesProtectionRequest: SetInstancesProtectionRequest,
    DeleteNotificationConfigurationResponse: DeleteNotificationConfigurationResponse,
    DetachInstancesResponse: DetachInstancesResponse,
    RollingUpdateSettings: RollingUpdateSettings,
    ModifyLaunchConfigurationAttributesResponse: ModifyLaunchConfigurationAttributesResponse,
    CreateLaunchConfigurationRequest: CreateLaunchConfigurationRequest,
    AutoScalingGroup: AutoScalingGroup,
    AttachInstancesResponse: AttachInstancesResponse,
    DescribeAutoScalingGroupLastActivitiesResponse: DescribeAutoScalingGroupLastActivitiesResponse,
    DescribeAccountLimitsRequest: DescribeAccountLimitsRequest,
    ScaleInInstancesResponse: ScaleInInstancesResponse,
    CancelInstanceRefreshRequest: CancelInstanceRefreshRequest,
    DetachLoadBalancersResponse: DetachLoadBalancersResponse,
    ScalingPolicy: ScalingPolicy,
    DescribeAutoScalingGroupLastActivitiesRequest: DescribeAutoScalingGroupLastActivitiesRequest,
    HostNameSettings: HostNameSettings,
    ModifyLoadBalancersResponse: ModifyLoadBalancersResponse,
    CreateNotificationConfigurationRequest: CreateNotificationConfigurationRequest,
    DescribeScheduledActionsResponse: DescribeScheduledActionsResponse,
    ModifyNotificationConfigurationRequest: ModifyNotificationConfigurationRequest,
    DeleteLifecycleHookRequest: DeleteLifecycleHookRequest,
    ModifyLoadBalancerTargetAttributesResponse: ModifyLoadBalancerTargetAttributesResponse,
    ModifyAutoScalingGroupResponse: ModifyAutoScalingGroupResponse,
    ExitStandbyResponse: ExitStandbyResponse,
    InvocationResult: InvocationResult,
    ModifyScalingPolicyRequest: ModifyScalingPolicyRequest,
    InstanceMarketOptionsRequest: InstanceMarketOptionsRequest,
    RefreshBatch: RefreshBatch,
    EnterStandbyResponse: EnterStandbyResponse,
    UpgradeLifecycleHookResponse: UpgradeLifecycleHookResponse,
    InstanceTag: InstanceTag,
    ModifyLifecycleHookResponse: ModifyLifecycleHookResponse,
    LifecycleCommand: LifecycleCommand,
    DescribeAutoScalingAdvicesResponse: DescribeAutoScalingAdvicesResponse,
    CreateAutoScalingGroupRequest: CreateAutoScalingGroupRequest,
    DeleteScheduledActionResponse: DeleteScheduledActionResponse,
    UpgradeLaunchConfigurationRequest: UpgradeLaunchConfigurationRequest,
    DescribeAutoScalingActivitiesResponse: DescribeAutoScalingActivitiesResponse,
    DescribeNotificationConfigurationsResponse: DescribeNotificationConfigurationsResponse,
    DataDisk: DataDisk,
    RollbackInstanceRefreshResponse: RollbackInstanceRefreshResponse,
    DeleteScalingPolicyRequest: DeleteScalingPolicyRequest,
    LoginSettings: LoginSettings,
    CreateAutoScalingGroupFromInstanceResponse: CreateAutoScalingGroupFromInstanceResponse,
    DetachInstancesRequest: DetachInstancesRequest,
    Instance: Instance,
    DescribeAutoScalingInstancesResponse: DescribeAutoScalingInstancesResponse,
    EnhancedService: EnhancedService,
    RunAutomationServiceEnabled: RunAutomationServiceEnabled,
    DeleteLaunchConfigurationResponse: DeleteLaunchConfigurationResponse,
    IPv6InternetAccessible: IPv6InternetAccessible,
    DescribeScheduledActionsRequest: DescribeScheduledActionsRequest,
    RunSecurityServiceEnabled: RunSecurityServiceEnabled,
    RefreshBatchRelatedInstance: RefreshBatchRelatedInstance,
    DeleteScheduledActionRequest: DeleteScheduledActionRequest,
    DescribeAutoScalingActivitiesRequest: DescribeAutoScalingActivitiesRequest,
    ModifyDesiredCapacityRequest: ModifyDesiredCapacityRequest,
    CreateScheduledActionResponse: CreateScheduledActionResponse,
    StartInstanceRefreshResponse: StartInstanceRefreshResponse,
    CreateLifecycleHookRequest: CreateLifecycleHookRequest,
    ScheduledAction: ScheduledAction,
    ModifyLifecycleHookRequest: ModifyLifecycleHookRequest,
    CompleteLifecycleActionResponse: CompleteLifecycleActionResponse,
    ScaleOutInstancesResponse: ScaleOutInstancesResponse,
    RefreshSettings: RefreshSettings,
    Filter: Filter,
    DescribeLifecycleHooksRequest: DescribeLifecycleHooksRequest,
    ServiceSettings: ServiceSettings,
    CreateAutoScalingGroupResponse: CreateAutoScalingGroupResponse,
    TargetAttribute: TargetAttribute,
    ModifyNotificationConfigurationResponse: ModifyNotificationConfigurationResponse,
    LimitedLoginSettings: LimitedLoginSettings,
    DescribeLifecycleHooksResponse: DescribeLifecycleHooksResponse,
    CreateScalingPolicyRequest: CreateScalingPolicyRequest,
    ResumeInstanceRefreshRequest: ResumeInstanceRefreshRequest,
    DescribeAutoScalingAdvicesRequest: DescribeAutoScalingAdvicesRequest,
    DeleteNotificationConfigurationRequest: DeleteNotificationConfigurationRequest,
    DescribeLaunchConfigurationsRequest: DescribeLaunchConfigurationsRequest,
    NotificationTarget: NotificationTarget,
    ModifyLoadBalancerTargetAttributesRequest: ModifyLoadBalancerTargetAttributesRequest,
    RollbackInstanceRefreshRequest: RollbackInstanceRefreshRequest,
    StartInstanceRefreshRequest: StartInstanceRefreshRequest,
    DeleteAutoScalingGroupResponse: DeleteAutoScalingGroupResponse,
    LifecycleActionResultInfo: LifecycleActionResultInfo,
    AutoScalingGroupAbstract: AutoScalingGroupAbstract,
    EnableAutoScalingGroupRequest: EnableAutoScalingGroupRequest,
    StopInstanceRefreshRequest: StopInstanceRefreshRequest,
    MetricAlarm: MetricAlarm,
    RefreshActivity: RefreshActivity,
    DescribeNotificationConfigurationsRequest: DescribeNotificationConfigurationsRequest,
    ScaleInInstancesRequest: ScaleInInstancesRequest,
    LifecycleHook: LifecycleHook,
    ForwardLoadBalancer: ForwardLoadBalancer,
    ClearLaunchConfigurationAttributesRequest: ClearLaunchConfigurationAttributesRequest,
    InstanceNameIndexSettings: InstanceNameIndexSettings,
    DeleteAutoScalingGroupRequest: DeleteAutoScalingGroupRequest,
    AutoScalingAdvice: AutoScalingAdvice,
    StartAutoScalingInstancesRequest: StartAutoScalingInstancesRequest,
    AttachInstancesRequest: AttachInstancesRequest,
    StopInstanceRefreshResponse: StopInstanceRefreshResponse,
    AttachLoadBalancersRequest: AttachLoadBalancersRequest,
    SpotMixedAllocationPolicy: SpotMixedAllocationPolicy,
    UpgradeLifecycleHookRequest: UpgradeLifecycleHookRequest,
    ResumeInstanceRefreshResponse: ResumeInstanceRefreshResponse,
    DescribeScalingPoliciesResponse: DescribeScalingPoliciesResponse,
    Activity: Activity,
    ModifyDesiredCapacityResponse: ModifyDesiredCapacityResponse,
    StopAutoScalingInstancesRequest: StopAutoScalingInstancesRequest,
    RunMonitorServiceEnabled: RunMonitorServiceEnabled,
    MetadataItem: MetadataItem,
    CancelInstanceRefreshResponse: CancelInstanceRefreshResponse,
    ActivtyRelatedInstance: ActivtyRelatedInstance,
    CreateAutoScalingGroupFromInstanceRequest: CreateAutoScalingGroupFromInstanceRequest,
    InternetAccessible: InternetAccessible,
    EnableAutoScalingGroupResponse: EnableAutoScalingGroupResponse,
    UpgradeLaunchConfigurationResponse: UpgradeLaunchConfigurationResponse,
    InstanceChargePrepaid: InstanceChargePrepaid,
    DeleteLifecycleHookResponse: DeleteLifecycleHookResponse,
    ExecuteScalingPolicyRequest: ExecuteScalingPolicyRequest,

}
